Ошибка полнотекстового поиска Postgres при использовании setweight()

У меня PostgreSQL 9.6.8 работает на Fedora 27 64bit. Когда я выполняю этот запрос:

UPDATE tbl SET textsearchable_index_col = 
setweight(to_tsvector('french', coalesce("col1",'')), 'D') || 
setweight(to_tsvector('french', coalesce("col2",'')), 'D');

Я получаю эту ошибку:

ERROR:  cache lookup failed for function 3625

********** Error **********

ERROR: cache lookup failed for function 3625
SQL state: XX000

но когда я выполню либо:

UPDATE tbl SET textsearchable_index_col = 
setweight(to_tsvector('french', coalesce("col1",'')), 'D');

или же

UPDATE tbl SET textsearchable_index_col = 
setweight(to_tsvector('french', coalesce("col2",'')), 'D');

Я получил:

Query returned successfully: 0 rows affected, 11 msec execution time.

У меня вопрос, почему он работает для каждой колонки по отдельности, но не работает, когда вместе? Эта ссылка показывает, что должно быть возможно использовать оба столбца в одном запросе (в конце раздела 12.3.1).

Изменить: вот что система возвращает для запросов Лоренца. Первый запрос возвращает

 oprname | oprleft  | oprright | oprcode     
---------+----------+----------+----------
 ||      | tsvector | tsvector | 3625

Второй запрос возвращает пустой набор результатов.

1 ответ

Решение

Ваша база данных повреждена, и вам не хватает функции tsvector_concat которая является функцией позади || оператор.

Вот как это должно выглядеть на здоровой системе:

SELECT oprname, oprleft::regtype, oprright::regtype, oprcode
FROM pg_operator
WHERE oid = 3633;

 oprname | oprleft  | oprright |     oprcode     
---------+----------+----------+-----------------
 ||      | tsvector | tsvector | tsvector_concat
(1 row)

SELECT proname, proargtypes::regtype[], prosrc
FROM pg_proc
WHERE oid = 3625;

     proname     |        proargtypes        |     prosrc      
-----------------+---------------------------+-----------------
 tsvector_concat | [0:1]={tsvector,tsvector} | tsvector_concat
(1 row)

Вторая часть отсутствует в вашем случае.

Вы должны восстановить из резервной копии.

Попробуйте выяснить, как вы попали в этот беспорядок, чтобы вы могли избежать его в будущем.

Другие вопросы по тегам