PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как създавате Postgresql JSONB масив в индекса на масив?

Е GIN индекс какво искаш?

Изглежда, че първо трябва да организирате идентификаторите във форма, която е по-податлива. По-запознат съм с Python, отколкото с PostgreSQL начините за манипулиране на JSON, така че използвах PL/Python за тази цел.

   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. Как да върна един елемент от string_to_array() в PostgreSQL 8.4?

  2. Как мога да слушам създаването на конкретен модел и да създам нов (на различна таблица) въз основа на това?

  3. връзката е отказана postgres docker

  4. Какъв е еквивалентът на PostgreSQL на SQL Server NVARCHAR?

  5. Rails миграции за схеми на postgreSQL