Za předpokladu, že mluvíte o skutečném, striktním JSON (bez zvláštností, jako jsou klíče bez uvozovek)...
json
se příliš neliší od text
. Kromě ověření JSON toho moc nedělá .
jsonb
je jiná bestie ve srovnání s těmito dvěma:je to plnohodnotná datová struktura s vlastním interním formátem, která má k dispozici mnohem více operací při vyhledávání. Například json
nemá žádné použitelné =
(operátor rovnosti). jsonb
má. (text
má také, i když je sémanticky odlišný.)
Je mnohem rozumnější indexovat, ale během čtení a zápisu se musí transformovat tam a zpět.
Vzhledem k tomu jsonb
zde nevypadá jako správná volba.
... Zbývá tedy učinit jediné rozhodnutí:
Chcete zajistit, aby vaše databáze obsahovala pouze platné hodnoty JSON ve vašem sloupci? Na úrovni databáze? Nebo důvěřujete každému klientovi této databáze (obvykle serverovým aplikacím), že poskytuje pouze platná data?
json
je relativně bezpečná volba v obou směrech. Pomocí text
by teoreticky mohl zlepšit výkon o zanedbatelnou rezervu kvůli absenci validace, ale konkrétní čísla získáte pouze srovnáním. Ale nebude mít takovou ochranu proti hodnotám, které nejsou JSON, a náhodná chyba v klientovi by mohla zůstat bez povšimnutí. Testujte zodpovědně!