Primero, hstore
es un módulo de contribución, que solo le permite almacenar pares clave => valor, donde las claves y los valores solo pueden ser text
s (sin embargo, los valores pueden ser sql NULL
s también).
Ambos json
&jsonb
le permite almacenar un valor JSON válido (definido en su especificación).
F. ej. estas son representaciones JSON válidas:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
es solo un pequeño subconjunto en comparación con lo que JSON es capaz (pero si solo necesita este subconjunto, está bien).
La única diferencia entre json
&jsonb
es su almacenamiento:
json
se almacena en su formato de texto sin formato, mientras quejsonb
se almacena en alguna representación binaria
Hay 3 consecuencias principales de esto:
jsonb
normalmente ocupa más espacio en disco para almacenar quejson
(a veces no)jsonb
lleva más tiempo compilar a partir de su representación de entrada quejson
json
las operaciones toman significativamente más tiempo quejsonb
(&el análisis también debe realizarse cada vez que realiza alguna operación en unjson
valor escrito)
Cuando jsonb
estará disponible con una versión estable, habrá dos casos de uso principales, cuando puede seleccionar fácilmente entre ellos:
- Si solo trabaja con la representación JSON en su aplicación, PostgreSQL solo se usa para almacenar y recuperar esta representación, debe usar
json
. - Si realiza muchas operaciones en el valor JSON en PostgreSQL, o usa la indexación en algún campo JSON, debe usar
jsonb
.