检查 Postgres 数组中是否存在任何给定的值数组

Sud*_*han 1 arrays postgresql ruby-on-rails ruby-on-rails-4

我正在编写一个 Rails 4 应用程序,并且在我的一个名为 的模型上有一个字符串数组列identifiers。当用户传入标识符列表时,获取任何给定标识符与任何存储的标识符匹配的行的语法是什么?

我正在尝试where('ARRAY[?] == any(identifiers)', ids),但这似乎不起作用。

Erw*_*ter 5

使用数组运算符“重叠”:&&

SELECT * FROM tbl WHERE ARRAY[1,2,3] && identifiers
Run Code Online (Sandbox Code Playgroud)

或者:

SELECT * FROM tbl WHERE '{1,2,3}'::int[] && identifiers
Run Code Online (Sandbox Code Playgroud)

您没有透露确切的类型,当然,它必须匹配。我的例子是整数数组。

这种形式可以在标识符列上使用 GIN 索引:

CREATE INDEX tbl_identifiers_gin_idx ON tbl USING GIN (identifiers);
Run Code Online (Sandbox Code Playgroud)