PostgreSQL 9.2 introdujo el json
tipo de campo. ¿Por qué y cuándo debo usarlo? ¿Qué beneficios tiene sobre un campo de texto?
Pensé que había nuevas opciones de consulta disponibles, sin embargo, no he visto ninguna. ¿Me estoy perdiendo de algo?
PostgreSQL 9.2 introdujo el json
tipo de campo. ¿Por qué y cuándo debo usarlo? ¿Qué beneficios tiene sobre un campo de texto?
Pensé que había nuevas opciones de consulta disponibles, sin embargo, no he visto ninguna. ¿Me estoy perdiendo de algo?
Respuestas:
El beneficio de la nueva característica es doble. Las columnas de tipojson
verifican la validez de su contenido para que lo que está en la columna sea JSON válido automáticamente y reciba un error si intenta escribir algo más en él.
Y tiene funciones básicas para crear JSON válidos sobre la marcha desde filas o matrices, que es un caso de uso muy común.
Cito a Andrew Dunstan en la lista de hackers pgsql :
En algún momento, posiblemente habrá algunas funciones de procesamiento de json (en oposición a la producción de json), pero no en 9.2.
Utilicé esa cita antes en esta pregunta relacionada sobre SO .
.. finalmente trae una serie de funciones y operadores. Consulte la página del manual para las funciones JSON .
Respuesta relacionada sobre SO:
@Publicará la publicación del blog. Ver comentario a continuación.
Asegúrese de revisar el nuevo jsonb
tipo con una gran cantidad de nuevas funcionalidades.
Sobre todo, el almacenamiento binario descompuesto permite un almacenamiento más pequeño en el disco y un operador de igualdad para jsonb
(a diferencia json
), lo que hace posible una serie de operaciones adicionales (como DISTINCT
o un UNIQUE
índice).
Sin embargo, se han agregado más funciones para ambos json
y jsonb
. json_to_record()
, json_to_recordset()
etc. Más en las notas de la versión.
En pocas palabras, el tipo de datos JSON (y la extensión HSTORE y el tipo de datos más antiguos también) le permiten usar PostgreSQL como un almacén de datos "sin esquema" (o combinar datos relacionales y no relacionales "sin esquema"), en lugar de tener que recurrir a algunas de las otras opciones de NoSQL (como MongoDB). Incluso obtienes algunas cosas que no puedes hacer con MongoDB, como la indexación filtrada, la indexación de expresiones, etc. El único inconveniente es que PostgreSQL no admite la creación de fragmentos de fábrica como lo hace MongoDB ... sin embargo, yo Realmente me pregunto con qué frecuencia es realmente necesario fragmentar . Con una base de datos PostgreSQL 9.3 bien configurada, suficientes recursos de O / S y algunos índices de expresión filtrados razonablemente bien pensados, debería ser capaz de lograr fácilmente recuperaciones de filas sin esquema en el rango de 0.25 milisegundos.
HTH, Dave Sisk
Básicamente veo tres casos de uso aquí:
El primero se puede hacer directamente desde PostgreSQL sin necesidad de complementos. Deberías poder hacer algo como:
SELECT row_to_json(mt.id, mt.testval, array_agg(mt2))
FROM my_table mt
JOIN my_table2 mt2 ON mt.id = mt2.mt_id
WHERE mt.id = 123;
Esto se puede usar para crear matrices anidadas, etc. en su salida y evitar muchos problemas de análisis desordenados en el lado de la aplicación.
el segundo es pasar datos complejos a la base de datos para su procesamiento. Actualmente no hay funciones integradas para facilitar esto, pero con complementos como pl / v8js, puede programar su base de datos en Javascript y usar json como formato de intercambio. Esto puede permitir la creación de interfaces más ricas dentro de su base de datos. Tenga en cuenta que, dado que puede indexar salidas de funciones, puede usar esto para crear índices de aspectos de JSON que se almacenarán en su base de datos.
El tercero es un área que planeamos usar en LedgerSMB. La idea es que podríamos permitir que los integradores de sistemas almacenen información muy simple junto con las cuentas de los clientes. Esto podría empaquetarse en un campo JSON que se almacenaría. Esto no podría ser consultado directamente por las aplicaciones principales, pero si la gente quisiera agregar esto usando pl / v8js, esto podría hacerse para negocios individuales que usan el software.