PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tìm kiếm một mảng JSON cho một đối tượng có chứa giá trị khớp với một mẫu

Không có jsonb được tích hợp sẵn các toán tử cũng như bất kỳ chỉ mục nào hỗ trợ trực tiếp loại bộ lọc này (chưa).

Tôi đề nghị một EXISTS bán tham gia:

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

Nó tránh các đánh giá thừa và DISTINCT cuối cùng bước bạn cần để có được các hàng riêng biệt với CROSS JOIN đơn giản .

Nếu điều này vẫn chưa đủ nhanh, một giải pháp chuyên biệt phức tạp hơn cho loại truy vấn nhất định sẽ là trích xuất một chuỗi liên kết của các giá trị duy nhất (với dấu phân cách sẽ không ảnh hưởng đến các mẫu tìm kiếm của bạn) trên mỗi hàng trong dấu IMMUTABLE , xây dựng chỉ mục GIN trigram trên biểu thức hàm và sử dụng cùng một biểu thức trong các truy vấn của bạn.

Có liên quan:

  • Tìm kiếm các giá trị lồng nhau trong mảng jsonb với toán tử lớn hơn
  • Tìm các hàng có chứa khóa trong mảng bản ghi JSONB
  • Tạo chỉ mục JSONB của Postgres trên đối tượng con của mảng

Ngoài ra, nếu jsonb của bạn các giá trị thực sự giống như ví dụ, bạn có thể loại bỏ nhiều nhiễu và chỉ cần lưu trữ:

[
   {"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. Cách tạo Chế độ xem trong PostgreSQL

  2. Nhiều SQL hơn, ít mã hơn, với PostgreSQL

  3. lấy bản ghi ba tháng trước từ bảng

  4. Cách Width_Bucket () hoạt động trong PostgreSQL

  5. Các tùy chọn khôi phục thảm họa cho PostgreSQL được triển khai cho một đám mây lai