Ten eerste, hstore
is een contrib-module, waarmee u alleen sleutel => waardeparen kunt opslaan, waarbij sleutels en waarden alleen text
kunnen zijn s (waarden kunnen echter sql NULL
zijn s ook).
Beide json
&jsonb
stelt u in staat een geldige JSON waarde op te slaan (gedefinieerd in de specificaties).
vb. dit zijn geldige JSON-representaties:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
is slechts een kleine subset vergeleken met wat JSON kan (maar als je alleen deze subset nodig hebt, is het prima).
Het enige verschil tussen json
&jsonb
is hun opslag:
json
wordt opgeslagen in platte tekst, terwijljsonb
wordt opgeslagen in een binaire weergave
Dit heeft 3 grote gevolgen:
jsonb
kost gewoonlijk meer schijfruimte om op te slaan danjson
(soms niet)jsonb
kost meer tijd om te bouwen vanaf de invoerrepresentatie danjson
json
operaties duren aanzienlijk meer tijd danjsonb
(&parseren moet ook worden gedaan elke keer dat u een bewerking uitvoert op eenjson
getypte waarde)
Wanneer jsonb
beschikbaar zal zijn met een stabiele release, er zullen twee belangrijke gebruiksscenario's zijn, wanneer u er gemakkelijk tussen kunt kiezen:
- Als u alleen met de JSON-representatie in uw applicatie werkt, wordt PostgreSQL alleen gebruikt om deze representatie op te slaan en op te halen, u moet
json
gebruiken . - Als u veel bewerkingen uitvoert op de JSON-waarde in PostgreSQL, of indexering op een JSON-veld gebruikt, moet u
jsonb
gebruiken .