Создать индекс postgresql для текстового столбца, приведенного к массиву - PullRequest
6 голосов
/ 25 августа 2011

У меня есть таблица postgresql, в которой есть столбец с типом данных = 'text', в котором мне нужно создать индекс, в котором этот столбец будет приведен к типу integer []. Однако всякий раз, когда я пытаюсь это сделать, я получаю следующую ошибку:

ОШИБКА: функции в выражении индекса должны быть помечены IMMUTABLE

Вот код:

create table test (a integer[], b text);

insert into test values ('{10,20,30}','{40,50,60}');

CREATE INDEX index_test on test USING GIN ((   b::integer[]      ));

Обратите внимание, что одним из возможных обходных путей является создание функции, помеченной как IMMUTABLE, которая принимает значение столбца и выполняет приведение типов внутри функции, но проблема (помимо добавления служебных данных) заключается в том, что у меня много разных целей 'типы данных массива (например, text [], int2 [], int4 [] и т. д.), и было бы невозможно создать отдельную функцию для каждого типа данных потенциального целевого массива.

1 Ответ

2 голосов
/ 10 декабря 2011

ответил в этой теме в списках рассылки PostgreSQL.Нажмите «Последующие действия» или «Далее по теме» в ссылках после сообщения, чтобы перейти к (короткой) теме по теме.

Там нет никакого рецепта, но Том только говорит об определении явногоприведение от text[] до integer[].Если позволит время, я дополню этот ответ примером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...