我在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
第二个查询返回一个空结果集。
答案 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)
你的案子中缺少第二部分。
您应该从备份中恢复。
尝试弄清楚你是如何陷入这种混乱的,以便将来可以避免它。