PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Permintaan untuk elemen array di dalam tipe JSON

jsonb di Postgres 9.4+

Anda bisa gunakan kueri yang sama seperti di bawah ini, hanya dengan jsonb_array_elements() .

Melainkan gunakan jsonb operator "berisi" @> dalam kombinasi dengan indeks GIN yang cocok pada ekspresi 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"}]';

Karena kunci objects memegang array J JSON , kita perlu mencocokkan struktur dalam istilah pencarian dan membungkus elemen array ke dalam tanda kurung siku juga. Lepaskan tanda kurung array saat mencari catatan biasa.

Penjelasan dan opsi lebih lanjut:

  • Indeks untuk menemukan elemen dalam larik JSON

json di Postgres 9.3+

Hapus sarang array JSON dengan fungsi json_array_elements() di lateral bergabung dalam FROM klausa dan uji elemennya:

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

db<>main biola di sini
sqlfiddle lama

Atau, setara dengan hanya tunggal tingkat bersarang:

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

->> , -> dan #> operator dijelaskan dalam manual.

Kedua kueri menggunakan JOIN LATERAL implicit implisit .

Berhubungan erat:

  • Kueri elemen larik di kolom 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. Mengelola Ketersediaan Tinggi di PostgreSQL – Bagian II:Manajer Replikasi

  2. Tidak dapat memulai Postgres

  3. Uji fungsi null dengan parameter yang bervariasi

  4. Bagaimana cara menggunakan operator PostgreSQL JSON(B) yang berisi tanda tanya? melalui JDBC

  5. Dapatkan Id dari INSERT bersyarat