Postgresql 多列 GIN 索引

Tah*_*gir 9 postgresql gin-index

假设一个items像这样的 postgresql 表。(keywords列是类型text[]

name   account_id      keywords
------------------------------
foo1   1               ['k1', 'k2']
foo2   1               ['k1', 'k3']
foo3   2               ['k4', 'k1']
foo4   2               ['k1', 'k6']
Run Code Online (Sandbox Code Playgroud)

items 中的每一行都与 a 相关Account(该表由 account_id 虚拟拆分)。我们希望进行如下查询:“带有关键字 k1 的帐户 1 的项目”。此查询需要在account_idkeywords列上使用复合 GIN 索引。

实际上,我们需要一个倒排索引,行是这样的:(每行的键应该是复合的)

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

在 postgresql 中创建此索引的正确方法是什么?

Tah*_*gir 8

答案与此问题的答案相同:Inner join using an array column

重点是安装btree_gin扩展(这可能需要额外的包,比如postgresql-contrib

然后,可以通过以下方式轻松启用扩展:(需要 postgresql >= 9.1)

CREATE EXTENSION btree_gin;

索引可以通过以下方式创建:

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