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:
jsonse almacena en su formato de texto sin formato, mientras quejsonbse almacena en alguna representación binaria
Hay 3 consecuencias principales de esto:
jsonbnormalmente ocupa más espacio en disco para almacenar quejson(a veces no)jsonblleva más tiempo compilar a partir de su representación de entrada quejsonjsonlas operaciones toman significativamente más tiempo quejsonb(&el análisis también debe realizarse cada vez que realiza alguna operación en unjsonvalor 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.