Nejprve hstore
je modul contrib, který vám umožňuje ukládat pouze páry klíč => hodnota, kde klíče a hodnoty mohou být pouze text
s (hodnoty však mohou být sql NULL
s taky).
Oba json
&jsonb
umožňuje uložit platnou hodnotu JSON (definováno v jeho specifikaci).
F.ex. toto jsou platné reprezentace JSON:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
je jen malá podmnožina ve srovnání s tím, co umí JSON (ale pokud potřebujete pouze tuto podmnožinu, je to v pořádku).
Jediný rozdíl mezi json
&jsonb
je jejich úložiště:
json
je uložen ve formátu prostého textu, zatímcojsonb
je uložen v nějaké binární reprezentaci
To má 3 hlavní důsledky:
jsonb
uložení obvykle zabere více místa na disku nežjson
(někdy ne)jsonb
Sestavení z jeho vstupní reprezentace trvá déle nežjson
json
operace zaberou významně více času nežjsonb
(&analýzu je také nutné provést pokaždé, když provádíte nějakou operaci vjson
zadaná hodnota)
Když jsonb
bude k dispozici se stabilní verzí, budou existovat dva hlavní případy použití, kdy si mezi nimi můžete snadno vybrat:
- Pokud ve své aplikaci pracujete pouze s reprezentací JSON, PostgreSQL se používá pouze k ukládání a načítání této reprezentace, měli byste použít
json
. - Pokud provádíte mnoho operací s hodnotou JSON v PostgreSQL nebo používáte indexování v některých polích JSON, měli byste použít
jsonb
.