web-dev-qa-db-fra.com

Indice de gin multi-colonnes PostgreSQL

Supposons une table PostgreSQL items comme ceci. (keywords colonne est de type text[])

name   account_id      keywords
------------------------------
foo1   1               ['k1', 'k2']
foo2   1               ['k1', 'k3']
foo3   2               ['k4', 'k1']
foo4   2               ['k1', 'k6']

Chaque ligne d'éléments est liée à un Account (la table est pratiquement écartée par compte_id). Nous voulons faire des questions comme: "Articles pour le compte 1 avec le mot-clé K1". Cette requête nécessite un indice de gin composite sur account_id et keywords colonne.

En fait, nous avons besoin d'un index inversé, avec des lignes comme ceci: (la clé de chaque ligne devrait être composite)

(account_id, keyword) --> [item1, item2, ...]

Quelle est la bonne façon de créer cet index dans PostgreSQL?

6
Taha Jahangir

La réponse est la même que la réponse à cette question: Joindre interne à l'aide d'une colonne de tablea

Le point principal consiste à installer l'extension btree_gin (cela peut nécessiter un package supplémentaire, comme postgresql-contrib)

Ensuite, l'extension peut être activée facilement avec: (nécessite PostgreSQL> = 9.1)

CREATE EXTENSION btree_gin;

Et l'index peut être créé avec:

CREATE INDEX index_name ON items USING GIN (account_id, keywords);

6
Taha Jahangir