2014-02-03 5 views
0

Я добавил столбец intarray в свою таблицу и успешно добавил данные в столбец.Оператор не существует: integer [] @@ integer []

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. 

я установил 9.3 через Homebrew для OS X, который я считаю, включает в себя intarray модуль , и, как я уже сказал, я добавил столбцы массива и данные без проблем. Кроме этого:

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

Update:

Я подумал, что мне нужен конкретный индекс перед операторами будет работать. В примере 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" 

Я отсутствует расширение или что-то не так с запросом или что?

ответ

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; 

Запуск этого против моего db получил все операторы, работающие ... Я предполагал, что с P ostgres был установлен с поддержкой intarray, и все было готово к работе. Но он должен быть включен вручную для db.

Я думаю, это настолько очевидно для разработчиков Postgres, что они забыли поместить его в документацию.

+0

Есть несколько связанных (возможно полезных) [ответов, предлагающих создать расширение 'intarray'] (http://stackoverflow.com/search?q= [postgres] + create + extension + intarray + operator) для дополнительных операторов. –

Смежные вопросы