使用setweight()时Postgres全文搜索错误

时间:2018-04-14 02:30:38

标签: sql postgresql full-text-search tx-indexed-search

我在Fedora 27 64bit上运行PostgreSQL 9.6.8。当我执行此查询时:

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.

我的问题是为什么它可以单独用于任一列,但在一起时它不起作用? 这个link表明应该可以在同一个查询中使用这两列(在第12.3.1节末尾)。

编辑:这是系统为Laurenz的查询返回的内容。第一个查询返回

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

第二个查询返回一个空结果集。

1 个答案:

答案 0 :(得分: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)

你的案子中缺少第二部分。

您应该从备份中恢复。

尝试弄清楚你是如何陷入这种混乱的,以便将来可以避免它。