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

Kiểm tra xem một mảng Postgres JSON có chứa một chuỗi hay không

Kể từ PostgreSQL 9.4, bạn có thể sử dụng ? nhà điều hành:

select info->>'name' from rabbits where (info->'food')::jsonb ? 'carrots';

Bạn thậm chí có thể lập chỉ mục ? truy vấn về "food" nếu bạn chuyển sang jsonb thay vào đó gõ:

alter table rabbits alter info type jsonb using info::jsonb;
create index on rabbits using gin ((info->'food'));
select info->>'name' from rabbits where info->'food' ? 'carrots';

Tất nhiên, bạn có thể không có thời gian cho việc đó với tư cách là người nuôi thỏ toàn thời gian.

Cập nhật: Dưới đây là minh chứng về những cải thiện hiệu suất trên bàn 1.000.000 con thỏ, trong đó mỗi con thỏ thích hai loại thức ăn và 10% trong số chúng thích cà rốt:

d=# -- Postgres 9.3 solution
d=# explain analyze select info->>'name' from rabbits where exists (
d(# select 1 from json_array_elements(info->'food') as food
d(#   where food::text = '"carrots"'
d(# );
 Execution time: 3084.927 ms

d=# -- Postgres 9.4+ solution
d=# explain analyze select info->'name' from rabbits where (info->'food')::jsonb ? 'carrots';
 Execution time: 1255.501 ms

d=# alter table rabbits alter info type jsonb using info::jsonb;
d=# explain analyze select info->'name' from rabbits where info->'food' ? 'carrots';
 Execution time: 465.919 ms

d=# create index on rabbits using gin ((info->'food'));
d=# explain analyze select info->'name' from rabbits where info->'food' ? 'carrots';
 Execution time: 256.478 ms


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa các lỗ hổng / khoảng trống trong số được tạo bởi chuỗi Postgres

  2. ScaleGrid PostgreSQL trên Cơ sở hạ tầng đám mây VMware

  3. LOWER () - Chuyển đổi sang chữ thường trong PostgreSQL

  4. Khi nào sử dụng bảng kế thừa trong PostgreSQL?

  5. Cách hiển thị cài đặt hiện tại cho đầu ra rỗng trong PostgreSQL (psql)