Estou procurando alguns documentos e / ou exemplos para as novas funções JSON no PostgreSQL 9.2.
Especificamente, considerando uma série de registros JSON:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
Como eu escreveria o SQL para encontrar um registro pelo nome?
Em baunilha SQL:
SELECT * from json_data WHERE "name" = "Toby"
O manual oficial do desenvolvedor é bastante escasso:
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
Atualização I
Reuni uma essência detalhando o que é atualmente possível com o PostgreSQL 9.2 . Usando algumas funções personalizadas, é possível fazer coisas como:
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
Atualização II
Agora mudei minhas funções JSON para seu próprio projeto:
PostSQL - um conjunto de funções para transformar o PostgreSQL e o PL / v8 em um incrível repositório de documentos JSON
sql
json
postgresql
postgresql-9.2
postgresql-9.3
Toby Hede
fonte
fonte
Respostas:
Postgres 9.2
Cito Andrew Dunstan na lista pgsql-hackers :
Não o impede de fornecer um exemplo de implementação no PLV8 que deve resolver seu problema.
Postgres 9.3
Oferece um arsenal de novas funções e operadores para adicionar "json-processing".
A resposta para a pergunta original no Postgres 9.3:
Exemplo avançado:
Para tabelas maiores, você pode adicionar um índice de expressão para aumentar o desempenho:
Postgres 9.4
Adiciona
jsonb
(b para "binário", os valores são armazenados como tipos nativos do Postgres) e ainda mais funcionalidade para os dois tipos. Além dos índices de expressão mencionados acima,jsonb
também suporta índices GIN, btree e hash , sendo o GIN o mais potente deles.json
ejsonb
tipos de dados e funções .O manual chega a sugerir:
Negrito ênfase minha.
O desempenho se beneficia de melhorias gerais nos índices GIN.
Postgres 9.5
jsonb
Funções e operadores completos . Adicione mais funções para manipularjsonb
no local e para exibição.fonte
Com o Postgres 9.3+, basta usar o
->
operador. Por exemplo,SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
consulte http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ para obter alguns bons exemplos e um tutorial.
fonte
data
com um documento JSON:{images:{thumbnail:{url:'thumbnail.jpg'}}}
. Informe qual é a aparência dos seus dados e qual consulta está falhando.SELECT data->'%'->'thumbnail'->'url' AS thumb FROM instagram;
::json
conforme descrito em outros posts. Observe também que o->
operador lançará um erro se você tentar acessar uma propriedade que não existe (por exemplo, se você tiver escalonado o JSON):ERROR: column "jsonPropertyYouWant" does not exist
Com o postgres 9.3, use -> para acessar objetos. 4 exemplo
seed.rb
trilhos c
retorna
Você pode continuar aninhando
Retorna
fonte