PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Заявка за елементи на масив вътре в тип JSON

jsonb в Postgres 9.4+

Вие можете използвайте същата заявка като по-долу, само с jsonb_array_elements() .

Но по-скоро използвайте jsonb "съдържа" оператор @> в комбинация със съвпадащ GIN индекс на израза 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"}]';

Тъй като ключът objects съдържа JSON масив , трябва да съпоставим структурата в думата за търсене и също да увием елемента на масива в квадратни скоби. Пуснете скобите на масива, когато търсите обикновен запис.

Още обяснения и опции:

  • Индекс за намиране на елемент в JSON масив

json в Postgres 9.3+

Изключете JSON масива с функцията json_array_elements() в странично съединение в FROM клауза и тест за нейните елементи:

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

db<>цигулка тук
Стар sqlfiddle

Или еквивалентно само на единично ниво на гнездене:

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

->> , -> и #> операторите са обяснени в ръководството.

И двете заявки използват имплицитно JOIN LATERAL .

Тясно свързани:

  • Запитване за елемент от масив в колона 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. PostgreSQL 12:Внедряване на K-Nearest Neighbor Space Partitioned Generalized Search Tree Indexs

  2. Динамично предаване на имена на колони за променлива на запис в PostgreSQL

  3. Postgresql -bash:psql:командата не е намерена

  4. Концепции за висока достъпност на Oracle в PostgreSQL

  5. Postgres е най-готината база данни – Причина №1:Разработчиците я обичат!