sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan opretter du et Postgresql JSONB-array i array-indeks?

Er et GIN-indeks hvad vil du have?

Det ser ud til, at du først skal organisere ID'erne i en form, der er mere håndterbar. Jeg er mere fortrolig med Python, end jeg er med PostgreSQL-måderne til at manipulere JSON, så jeg brugte PL/Python til dette formål.

   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. postgresql vises ikke i datakilden, når der genereres .ADO.net Entity Data Model

  2. SQL ind i outfile - hvor er filen gemt? (MySQL, Windows)

  3. MYSQL vælger de nyeste indlæg fra tabeller

  4. Ansible elsker PostgreSQL