ActiveRecord - 搜索具有多个值的Postgres数组?

时间:2014-07-21 10:54:50

标签: postgresql activerecord sinatra

this tip开始,我看到我可以搜索具有奇异值的Postgres数组,所以:

User.where("'foo@bar.com' = ANY (emails)")

然而,我想知道如何搜索多个值,例如:

User.where("['foo@bar.com', 'bar@foo.com'] = ANY (emails)")

会产生PG::SyntaxError

我正在使用Activerecord 4.1.1

1 个答案:

答案 0 :(得分:1)

您需要PostgreSQL数组重叠或数组包含的运算符,具体取决于您是否需要AND或OR类行为。

SELECT ARRAY['foo@bar.com', 'bar@foo.com'] @@ emails FROM ...

SELECT ARRAY['foo@bar.com', 'bar@foo.com'] <@ emails FROM ...

使Rails发出PostgreSQL数组文字有望相当容易,但超出我的Rails-fu几乎为零。

如果emails的类型为varchar[]而不是text[],则您需要将数组文字强制转换为varchar,例如。

SELECT ARRAY['foo@bar.com', 'bar@foo.com']::varchar[] <@ emails FROM ...

要独立测试功能,您只需评估独立表达式,例如

regress=> SELECT ARRAY['foo@bar.com', 'bar@foo.com'] <@ ARRAY['foo@bar.com', 'bar@foo.com', 'fred'];
 ?column? 
----------
 t
(1 row)