PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak utworzyć tablicę Postgresql JSONB w indeksie tablicy?

Jest indeksem numeru GIN czego chcesz?

Wygląda na to, że najpierw musisz uporządkować identyfikatory w bardziej przystępnej formie. Jestem bardziej zaznajomiony z Pythonem niż ze sposobami PostgreSQL do manipulowania JSON, więc do tego celu użyłem PL/Pythona.

   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. Błąd bazy danych Postgres Nieprawidłowy nagłówek strony

  2. Wskazówka HINT_PASS_DISTINCT_THROUGH zmniejsza liczbę jednostek zwracanych na stronę dla żądania PageRequest poniżej skonfigurowanego rozmiaru strony (PostgreSQL)

  3. Najważniejsze zagrożenia bezpieczeństwa PostgreSQL

  4. Czy kolejność tabel w złączeniu ma znaczenie, gdy używane są złączenia LEWE (zewnętrzne)?

  5. Jak zapewnić Npgsql niestandardowy typ danych jako parametr?