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

Làm cách nào để bạn tạo một mảng Postgresql JSONB trong chỉ mục mảng?

Là một chỉ mục GIN bạn muốn gì?

Có vẻ như trước tiên bạn cần tổ chức các ID thành một dạng dễ hiểu hơn. Tôi quen thuộc với Python hơn là hiểu các cách PostgreSQL để thao tác JSON, vì vậy tôi đã sử dụng PL / Python cho mục đích này.

   DROP TABLE IF EXISTS ids;

CREATE TABLE ids (user_id integer, a jsonb);

INSERT INTO ids VALUES 
    (1, '{"b": [{"ids": [1, 2, 3, 4]}, {"ids": [2, 3, 4]}, {"ids": [1, 2, 4]}]}'),
    (2, '{"b": [{"ids": [2, 3, 4]}]}'),
    (3, '{"b": [{"ids": [4, 5, 6]}, {"ids": [6, 7, 8]}]}');

CREATE OR REPLACE FUNCTION extract_ids(a_json jsonb) 
RETURNS int[] AS
$BODY$
    import json
    s = set()
    a = json.loads(a_json)
    for key in a.keys():
        for id_set in a[key]:
            s.update(id_set['ids'])
    return(list(s))
$BODY$ LANGUAGE plpythonu IMMUTABLE;

SELECT user_id, extract_ids(a)
FROM ids;

CREATE INDEX ON ids USING gin (extract_ids(a));

SELECT user_id 
FROM ids
WHERE ARRAY[3] <@ extract_ids(a);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy có hàm tổng hợp bool_and không?

  2. Cần hỗ trợ với chức năng và kích hoạt Postgres

  3. Làm thế nào để chọn id với nhóm ngày tối đa theo danh mục trong truy vấn Ecto với Phoenix?

  4. Tôi có thể làm khô các lệnh sql run / sandbox không?

  5. Làm thế nào để sử dụng SQLAlchemy để truy cập liền mạch nhiều cơ sở dữ liệu?