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ě:
jsonje uložen ve formátu prostého textu, zatímcojsonbje uložen v nějaké binární reprezentaci
To má 3 hlavní důsledky:
jsonbuložení obvykle zabere více místa na disku nežjson(někdy ne)jsonbSestavení z jeho vstupní reprezentace trvá déle nežjsonjsonoperace zaberou významně více času nežjsonb(&analýzu je také nutné provést pokaždé, když provádíte nějakou operaci vjsonzadaná 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.