使用 setweight() 时 Postgres 全文搜索错误
Postgres full text search error when using setweight()
我在 Fedora 27 64 位上安装了 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 节的末尾)。
编辑:这是系统 returns 对 Laurenz 查询的内容。第一个查询returns
oprname | oprleft | oprright | oprcode
---------+----------+----------+----------
|| | tsvector | tsvector | 3625
第二个查询returns一个空结果集。
您的数据库已损坏,您缺少函数 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)
你的案例中缺少第二部分。
您应该从备份中恢复。
想一想你是怎么陷入这个烂摊子的,这样你以后就可以避免了。
我在 Fedora 27 64 位上安装了 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 节的末尾)。
编辑:这是系统 returns 对 Laurenz 查询的内容。第一个查询returns
oprname | oprleft | oprright | oprcode
---------+----------+----------+----------
|| | tsvector | tsvector | 3625
第二个查询returns一个空结果集。
您的数据库已损坏,您缺少函数 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)
你的案例中缺少第二部分。
您应该从备份中恢复。
想一想你是怎么陷入这个烂摊子的,这样你以后就可以避免了。