Создать индекс postgresql для текстового столбца, преобразованного в массив

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

ОШИБКА: функции в индексном выражении должны быть помечены как 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 [] и т. д. ...), и было бы невозможно создать отдельную функцию для каждого потенциального типа данных целевого массива.

6
задан archmeta 25 August 2011 в 03:38
поделиться