运算符不存在:整数[] @@ integer []

时间:2014-02-03 18:22:33

标签: postgresql postgresql-9.3

我在表格中添加了一个intarray列,并成功将数据添加到列中。

CREATE TABLE my_table
(
  ...
  tag_ids integer[],
)

当我尝试这样的查询时:

SELECT id, tag_ids from my_table where tag_ids @@ ARRAY[1,2]

我收到此错误:

ERROR:  operator does not exist: integer[] @@ integer[]
LINE 1: SELECT id, tag_ids from core_tile where tag_ids @@ ARRAY[1,2...
                                                    ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

我通过Homebrew为OS X安装了9.3,我认为它包含intarray模块,就像我说的那样我添加了数组列和数据没有问题。还有这个:

SELECT * FROM pg_available_extensions
...
"intarray";"1.0";"";"functions, operators, and index support for 1-D arrays of integers"

更新

我想知道在运营商运作之前我是否需要一个特定的索引。在the docs中的示例中,他们添加了这样的索引:

CREATE INDEX my_index ON my_table USING GIST (tag_ids gist__int_ops);

但是当我跑步时,我得到了:

ERROR:  operator class "gist__int_ops" does not exist for access method "gist"

我是否错过了扩展程序或查询有什么问题或什么?

1 个答案:

答案 0 :(得分:2)

好吧,我发现@>这里的运营商都工作了:
http://www.postgresql.org/docs/9.3/static/functions-array.html

这里只是其他的没有:
http://www.postgresql.org/docs/9.3/static/intarray.html

这向我提出了解决方案:

CREATE EXTENSION intarray;

对我的数据库运行此操作让所有操作员都正常工作......我认为自从Postgres安装了intarray支持后,它已经准备好了。但必须手动为数据库启用。

我想这对于Postgres开发者来说是如此明显,他们忘了把它放在文档中。