Próbuję przetestować jsontyp w PostgreSQL 9.3.
Mam jsonkolumnę o nazwie dataw tabeli o nazwie reports. JSON wygląda mniej więcej tak:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Chciałbym wyszukać w tabeli wszystkie raporty, które pasują do wartości „src” w tablicy „objects”. Na przykład, czy można wysyłać zapytania do bazy danych o wszystkie zgodne raporty 'src' = 'foo.png'? Pomyślnie napisałem zapytanie, które może pasować do "background":
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Ale ponieważ "objects"ma tablicę wartości, nie mogę napisać czegoś, co działa. Czy można wysyłać zapytania do bazy danych o wszystkie pasujące raporty 'src' = 'foo.png'? Przejrzałem te źródła, ale nadal nie mogę ich zdobyć:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Jak wykonywać zapytania przy użyciu pól w nowym typie danych PostgreSQL JSON?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Próbowałem też takich rzeczy, ale bezskutecznie:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Nie jestem ekspertem od SQL, więc nie wiem, co robię źle.
jsonb/ pg 9.4. Poza tym: dla prostego przypadku (1 poziom zagnieżdżenia),->operator również robi sztuczkęjsonw str. 9.3.