Estou tentando testar o json
tipo no PostgreSQL 9.3.
Eu tenho uma json
coluna chamada data
em uma tabela chamada reports
. O JSON se parece com isto:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Eu gostaria de consultar a tabela para todos os relatórios que correspondem ao valor 'src' na matriz 'objetos'. Por exemplo, é possível consultar o banco de dados para todos os relatórios correspondentes 'src' = 'foo.png'
? Escrevi com sucesso uma consulta que pode corresponder a "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Mas "objects"
, uma vez que tem uma matriz de valores, não consigo escrever algo que funcione. É possível consultar o banco de dados para todos os relatórios correspondentes 'src' = 'foo.png'
? Procurei por essas fontes, mas ainda não consigo:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Como faço uma consulta usando campos dentro do novo tipo de dados JSON PostgreSQL?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Eu também tentei coisas assim, mas sem sucesso:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Não sou um especialista em SQL, então não sei o que estou fazendo de errado.
jsonb
/ pg 9.4. À parte: para o caso simples (1 nível de aninhamento), o->
operador também faz o truquejson
na página 9.3.