Først hstore
er et bidragsmodul, som kun giver dig mulighed for at gemme nøgle => værdipar, hvor nøgler og værdier kun kan være text
s (værdier kan dog være sql NULL
også).
Både json
&jsonb
giver dig mulighed for at gemme en gyldig JSON værdi (defineret i dens spec).
F.eks. disse er gyldige JSON-repræsentationer:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
er bare en lille undergruppe i forhold til, hvad JSON er i stand til (men hvis du kun har brug for denne undergruppe, er det fint).
Den eneste forskel mellem json
&jsonb
er deres lager:
json
gemmes i sit almindelige tekstformat, mensjsonb
er gemt i en binær repræsentation
Der er 3 store konsekvenser af dette:
jsonb
tager normalt mere diskplads at gemme endjson
(nogle gange ikke)jsonb
tager længere tid at bygge fra sin inputrepræsentation endjson
json
operationer tager betydeligt mere tid endjsonb
(&parsing skal også udføres, hver gang du udfører en operation på enjson
indtastet værdi)
Når jsonb
vil være tilgængelig med en stabil udgivelse, vil der være to store use cases, når du nemt kan vælge mellem dem:
- Hvis du kun arbejder med JSON-repræsentationen i din applikation, bruges PostgreSQL kun til at gemme og hente denne repræsentation, du skal bruge
json
. - Hvis du udfører mange operationer på JSON-værdien i PostgreSQL eller bruger indeksering på et JSON-felt, bør du bruge
jsonb
.