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:
jsonbdi solito richiede più spazio su disco per l'archiviazione rispetto ajson(a volte no)jsonbrichiede più tempo per costruire dalla sua rappresentazione di input rispetto ajsonjsonle operazioni richiedono in modo significativo più tempo dijsonb(&anche l'analisi deve essere eseguita ogni volta che esegui qualche operazione su unjsonvalore 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.