Först, hstore
är en bidragsmodul, som endast låter dig lagra nyckel => värdepar, där nycklar och värden endast kan vara text
s (värden kan dock vara sql NULL
också).
Båda json
&jsonb
låter dig lagra ett giltigt JSON-värde (definierad i dess spec).
T.ex. dessa är giltiga JSON-representationer:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
är bara en liten delmängd jämfört med vad JSON kan (men om du bara behöver denna delmängd går det bra).
Den enda skillnaden mellan json
&jsonb
är deras lagring:
json
lagras i dess oformaterade textformat, medanjsonb
lagras i någon binär representation
Det finns tre stora konsekvenser av detta:
jsonb
tar vanligtvis mer diskutrymme att lagra änjson
(ibland inte)jsonb
tar mer tid att bygga från dess indatarepresentation änjson
json
operationer tar avsevärt mer tid änjsonb
(&parsning måste också göras varje gång du gör någon operation på enjson
inskrivet värde)
När jsonb
kommer att finnas tillgänglig med en stabil version, det kommer att finnas två stora användningsfall när du enkelt kan välja mellan dem:
- Om du bara arbetar med JSON-representationen i din applikation, används PostgreSQL endast för att lagra och hämta denna representation, du bör använda
json
. - Om du gör många operationer på JSON-värdet i PostgreSQL, eller använder indexering på något JSON-fält, bör du använda
jsonb
.