从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
答案 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)