Estoy buscando algunos documentos y / o ejemplos para las nuevas funciones JSON en PostgreSQL 9.2.
Específicamente, dada una serie de registros JSON:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
¿Cómo escribiría el SQL para encontrar un registro por nombre?
En vainilla SQL:
SELECT * from json_data WHERE "name" = "Toby"
El manual de desarrollo oficial es bastante escaso:
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
Actualización I
He reunido una esencia que detalla lo que actualmente es posible con PostgreSQL 9.2 . Usando algunas funciones personalizadas, es posible hacer cosas como:
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
Actualización II
Ahora he movido mis funciones JSON a su propio proyecto:
PostSQL : un conjunto de funciones para transformar PostgreSQL y PL / v8 en una increíble tienda de documentos JSON
sql
json
postgresql
postgresql-9.2
postgresql-9.3
Toby Hede
fuente
fuente
Respuestas:
Postgres 9.2
Cito a Andrew Dunstan en la lista de hackers pgsql :
No le impide proporcionar una implementación de ejemplo en PLV8 que debería resolver su problema.
Postgres 9.3
Ofrece un arsenal de nuevas funciones y operadores para agregar "procesamiento json".
La respuesta a la pregunta original en Postgres 9.3:
Ejemplo avanzado:
Para tablas más grandes, es posible que desee agregar un índice de expresión para aumentar el rendimiento:
Postgres 9.4
Agrega
jsonb
(b para "binario", los valores se almacenan como tipos nativos de Postgres) y aún más funcionalidad para ambos tipos. Además de los índices de expresión mencionados anteriormente,jsonb
también admite índices GIN, btree y hash , siendo GIN el más potente de estos.json
yjsonb
los tipos de datos y funciones .El manual llega a sugerir:
El énfasis en negrita es mío.
El rendimiento se beneficia de las mejoras generales de los índices GIN.
Postgres 9.5
jsonb
Funciones completas y operadores. Agregue más funciones para manipularjsonb
en el lugar y para mostrar.fuente
Con Postgres 9.3+, solo usa el
->
operador. Por ejemplo,SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
ver http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ para ver algunos buenos ejemplos y un tutorial.
fuente
data
con un documento JSON:{images:{thumbnail:{url:'thumbnail.jpg'}}}
. Háganos saber cómo se ven sus datos y qué consulta está fallando.SELECT data->'%'->'thumbnail'->'url' AS thumb FROM instagram;
::json
como se describe en otras publicaciones. También tenga en cuenta que el->
operador arrojará un error si intenta acceder a una propiedad que no existe (es decir, si ha escalonado JSON):ERROR: column "jsonPropertyYouWant" does not exist
Con postgres 9.3 use -> para acceder a objetos. 4 ejemplo
seed.rb
rieles c
devoluciones
Puedes continuar anidando
regreso
fuente