PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie o elementy tablicy wewnątrz typu JSON

jsonb w Postgresie 9.4+

możesz użyj tego samego zapytania, co poniżej, tylko z jsonb_array_elements() .

Ale raczej użyj jsonb "zawiera" operator @> w połączeniu z pasującym indeksem GIN w wyrażeniu data->'objects' :

CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);

SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';

Ponieważ klucz obiekty przechowuje tablicę JSON , musimy dopasować strukturę w wyszukiwanym terminie i umieścić element tablicy w nawiasach kwadratowych. Upuść nawiasy tablicowe podczas przeszukiwania zwykłego rekordu.

Więcej wyjaśnień i opcji:

  • Indeks do znajdowania elementu w tablicy JSON

json w Postgresie 9.3+

Rozpakuj tablicę JSON za pomocą funkcji json_array_elements() w sprzężeniu bocznym w FROM klauzula i przetestuj jej elementy:

SELECT data::text, obj
FROM   reports r, json_array_elements(r.data#>'{objects}') obj
WHERE  obj->>'src' = 'foo.png';

db<>graj tutaj
Stary sqlfiddle

Lub odpowiednik tylko singla poziom zagnieżdżenia:

SELECT *
FROM   reports r, json_array_elements(r.data->'objects') obj
WHERE  obj->>'src' = 'foo.png';

->> , -> i #> operatorzy są wyjaśnieni w instrukcji.

Oba zapytania używają niejawnego JOIN LATERAL .

Ściśle powiązane:

  • Zapytanie o element tablicy w kolumnie JSON


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać struktury danych pierścienia w funkcjach okien

  2. Zapytanie PostgreSQL z 'ANY' nie działa

  3. Generowanie danych i jakość sprzętu

  4. Jaka jest różnica między pg_table_size, pg_relation_size i pg_total_relation_size? (PostgreSQL)

  5. org.postgresql.util.PSQLException:FATAL:przepraszam, już za dużo klientów