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

Bagaimana Anda membuat array JSONB Postgresql dalam indeks array?

Adalah indeks GIN apa yang kamu inginkan?

Tampaknya Anda harus terlebih dahulu mengatur ID menjadi bentuk yang lebih mudah diatur. Saya lebih mengenal Python daripada cara PostgreSQL memanipulasi JSON, jadi saya menggunakan PL/Python untuk tujuan ini.

   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. Tidak dapat menginstal plpython3u - postgresql

  2. Bisakah dua tabel sementara dengan nama yang sama ada di kueri terpisah?

  3. PostgreSQL membuat indeks pada pemeran dari string hingga saat ini

  4. Jumlahkan beberapa rentang tanggal dalam satu kueri?

  5. bagaimana cara mengembalikan tabel temp dari fungsi postgres?