Innanzitutto, hstore
è un modulo contrib, che ti consente solo di memorizzare chiavi => coppie di valori, dove chiavi e valori possono essere solo text
s (tuttavia i valori possono essere sql NULL
s anche).
Entrambi json
&jsonb
consente di memorizzare un valore JSON valido (definito nelle sue specifiche).
F.ex. queste sono rappresentazioni JSON valide:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
è solo un piccolo sottoinsieme rispetto a ciò che JSON è capace (ma se hai solo bisogno di questo sottoinsieme, va bene).
L'unica differenza tra json
&jsonb
è il loro deposito:
json
è memorizzato nel suo formato di testo normale, mentrejsonb
è memorizzato in una rappresentazione binaria
Ci sono 3 conseguenze principali di questo:
jsonb
di solito richiede più spazio su disco per l'archiviazione rispetto ajson
(a volte no)jsonb
richiede più tempo per costruire dalla sua rappresentazione di input rispetto ajson
json
le operazioni richiedono in modo significativo più tempo dijsonb
(&anche l'analisi deve essere eseguita ogni volta che esegui qualche operazione su unjson
valore digitato)
Quando jsonb
sarà disponibile con una versione stabile, ci saranno due casi d'uso principali, quando potrai facilmente selezionarli:
- Se lavori solo con la rappresentazione JSON nella tua applicazione, PostgreSQL viene utilizzato solo per archiviare e recuperare questa rappresentazione, dovresti usare
json
. - Se esegui molte operazioni sul valore JSON in PostgreSQL o utilizzi l'indicizzazione su alcuni campi JSON, dovresti usare
jsonb
.