sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo consulto usando campos dentro del nuevo tipo de datos PostgreSQL JSON?

Postgres 9.2

Cito a Andrew Dunstan en la lista de pgsql-hackers:

Es posible que en algún momento haya algunas funciones de procesamiento de json (a diferencia de las de producción de json), pero no en 9.2.

No le impide proporcionar una implementación de ejemplo en PLV8 que debería resolver su problema. (El enlace está muerto ahora, vea PLV8 moderno en su lugar).

Postgres 9.3

Ofrece un arsenal de nuevas funciones y operadores para agregar "procesamiento json".

  • El manual sobre la nueva funcionalidad JSON.
  • La wiki de Postgres sobre las nuevas funciones en la página 9.3.

La respuesta a la pregunta original en PostgreSQL 9.3:

SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ]'
  ) AS elem
WHERE elem->>'name' = 'Toby';

Ejemplo avanzado:

  • Combinaciones de consulta con matriz anidada de registros en tipo de datos JSON

Para tablas más grandes, es posible que desee agregar un índice de expresión para aumentar el rendimiento:

  • Índice para encontrar un elemento en una matriz JSON

Postgres 9.4

Agrega jsonb (b para "binario", los valores se almacenan como tipos nativos de Postgres) y aún más funciones para ambos tipos Además de los índices de expresión mencionados anteriormente, jsonb también es compatible con los índices GIN, btree y hash, siendo GIN el más potente de estos.

  • El manual sobre json y jsonb tipos de datos y funciones.
  • La wiki de Postgres en JSONB en la página 9.4

El manual llega a sugerir:

En general, la mayoría de las aplicaciones deberían preferir almacenar datos JSON como jsonb , a menos que haya necesidades bastante especializadas, como suposiciones heredadas sobre el orden de las claves de objeto.

Énfasis en negrita mío.

El rendimiento se beneficia de las mejoras generales en los índices GIN.

Postgres 9.5

Complete jsonb funciones y operadores. Agregue más funciones para manipular jsonb en su lugar y para mostrar.

  • Buenas noticias importantes en las notas de lanzamiento de Postgres 9.5.