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

Truy vấn mảng JSONB tổng hợp trong Postgres?

Bạn nên tách các mảng cấp cao nhất ra và kiểm tra các phần tử từ đó:

select distinct id, content
FROM test
JOIN lateral (
    select elems 
    FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;

Về cách tốt nhất để làm điều này, điều đó phụ thuộc rất nhiều vào dữ liệu thực tế của bạn - có bao nhiêu hàng, độ lớn của các cấu trúc jsonb này, v.v. Tuy nhiên, nói chung, một tìm kiếm như ilike '% 3%' sẽ được hưởng lợi từ các chỉ mục dựa trên tắt pg_trgm vì họ không thể sử dụng chỉ mục btree truyền thống.

Chỉnh sửa:Truy vấn của @ Abelisto trong phần nhận xét tốt hơn vì nó phải hoạt động hiệu quả hơn, đặc biệt nếu nội dung có thể chứa 1000 phần tử:

select * from test 
where exists 
  (select 1 
   from jsonb_array_elements(content) jae(elems) 
   where elems ->> 0 = 'first 1' 
   and elems ->> 1 ilike '%3%'
  );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kết nối Postgres với máy chủ localhost bằng pgAdmin trên Ubuntu?

  2. Làm cách nào để ánh xạ cột dấu thời gian sang loại JPA?

  3. nhầm lẫn cổng postgresql 5433 hay 5432?

  4. chmod og-rwx server.key trong windows

  5. Flask và SQLAlchemy gây ra rất nhiều IDLE trong các kết nối giao dịch trong PostgreSQL