индекс текстового поиска jsonb - PullRequest
1 голос
/ 20 января 2020

У меня есть адресные данные, разбитые на поля в столбце JSONB

Я хочу запустить свободный текстовый поиск по этим данным и отметил, что postgres 11 имеет функцию jsonb_to_tsvector ()

Я пытаюсь создать индекс для моей таблицы с: -

CREATE INDEX ad_jsonb_ts_vector
ON my_address_data
USING GIN (jsonb_to_tsvector('English'::regconfig, address_data::JSONB, jsonb_build_array('text', 'numeric')));

Это дает мне ошибку: -

ERROR:  functions in index expression must be marked IMMUTABLE
SQL state: 42P17

Но как я понимаю, эта форма jsonb_to_tsvector является неизменной?

select provolatile from pg_proc 
where proname = 'jsonb_to_tsvector' 
AND oid::regprocedure ='jsonb_to_tsvector(regconfig,jsonb,jsonb)'::regprocedure

Возвращает "i".

Я что-то пропустил или это postgres ошибка. Версия 11.5

1 Ответ

1 голос
/ 20 января 2020

Функция jsonb_build_array является стабильной, а не неизменной. Попробуйте вместо этого:

CREATE INDEX ad_jsonb_ts_vector
ON my_address_data
USING GIN (jsonb_to_tsvector('English'::regconfig, address_data::JSONB, '["text", "numeric"]'::jsonb));
...