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

Cari array JSON untuk objek yang berisi nilai yang cocok dengan pola

Tidak ada jsonb bawaan operator maupun indeks apa pun yang mendukung filter semacam ini secara langsung (belum).

Saya menyarankan EXISTS semi-gabung:

SELECT t.*
FROM   tbl t
WHERE  EXISTS (
   SELECT FROM jsonb_array_elements(t.jsoncol) elem
   WHERE  elem->>'value' LIKE '%ba%'
   );

Ini menghindari evaluasi yang berlebihan dan DISTINCT final akhir langkah Anda perlu mendapatkan baris yang berbeda dengan CROSS JOIN plain .

Jika ini masih belum cukup cepat, solusi khusus yang lebih canggih untuk jenis kueri tertentu adalah dengan mengekstrak string gabungan dari nilai unik (dengan pembatas yang tidak akan mengganggu pola pencarian Anda) per baris dalam IMMUTABLE fungsi, buat indeks trigram GIN pada ekspresi fungsional dan gunakan ekspresi yang sama dalam kueri Anda.

Terkait:

  • Telusuri nilai bersarang dalam larik jsonb dengan operator yang lebih besar
  • Menemukan baris yang berisi kunci dalam larik catatan JSONB
  • Buat Indeks JSONB Postgres pada Sub-Objek Array

Selain itu, jika jsonb . Anda nilai benar-benar terlihat seperti contoh, Anda dapat memangkas banyak noise dan hanya menyimpan:

[
   {"foo":"bar"},
   {"biz":"baz"},
   {"beep":"boop"}
]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Untuk pemula, apakah ada banyak perbedaan antara MySQL dan PostgreSQL?

  2. Cara Mereplikasi Data PostgreSQL ke Situs Jarak Jauh

  3. Ekspor dan impor tabel dump (.sql) menggunakan pgAdmin

  4. Bagaimana cara menggunakan jpa data pegas untuk menanyakan kolom jsonb?

  5. Bagaimana Sind() Bekerja di PostgreSQL