Sto provando a testare il json
tipo in PostgreSQL 9.3.
Ho una json
colonna chiamata data
in una tabella chiamata reports
. Il JSON ha un aspetto simile a questo:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Vorrei interrogare la tabella per tutti i rapporti che corrispondono al valore "src" nella matrice "oggetti". Ad esempio, è possibile interrogare il DB per tutti i report che corrispondono 'src' = 'foo.png'
? Ho scritto con successo una query che può corrispondere a "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Ma poiché "objects"
ha una serie di valori, non riesco a scrivere qualcosa che funzioni. È possibile interrogare il DB per tutti i report che corrispondono 'src' = 'foo.png'
? Ho esaminato queste fonti ma ancora non riesco a ottenerlo:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Come eseguo query utilizzando i campi all'interno del nuovo tipo di dati JSON PostgreSQL?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Ho anche provato cose come questa ma senza successo:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Non sono un esperto di SQL, quindi non so cosa sto facendo di sbagliato.
jsonb
/ pg 9.4. A parte: per il caso semplice (1 livello di annidamento), l'->
operatore esegue anche il trucco perjson
a pag. 9.3.