Sto provando a testare il jsontipo in PostgreSQL 9.3.
Ho una jsoncolonna chiamata datain 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 perjsona pag. 9.3.