如何使用pg_trgm扩展中的%运算符?

4

我已经安装了pg_trgm模块。

pg_trgm | 1.0     | extensions | text similarity measurement and index ...

模式集是extensions。要使用它,我需要运行类似以下选择的内容:
extensions.similarity('hello','hallo');

我正在尝试使用%运算符运行一条语句,但收到了以下消息。

mydb=# select * from rssdata where description % 'Brazil';
ERROR:  operator does not exist: character varying % unknown
LINE 1: select * from rssdata where description % 'Brazil';
                                            ^
HINT:  No operator matches the given name and argument type(s).
You might need to add explicit type casts. 

运行%<->操作符需要哪些条件?

1个回答

9

很可能问题出在search_path设置上。运行以下命令:

SHOW search_path;

您安装 pg_trgm 的模式是否已包含?如果没有,请添加它。

或者,如果您拥有必要的权限,可以使用以下命令更改扩展的模式:alter extension

ALTER EXTENSION pg_trgm SET SCHEMA public;  -- or the schema you want

另外,您还可以使用OPERATOR()结构对函数甚至运算符进行架构限定:

SELECT * FROM rssdata WHERE extensions.similarity(description, 'Brazil') > .8;
SELECT * FROM rssdata WHERE description OPERATOR(extensions.%) 'Brazil';

消除对search_path的依赖。但这很繁琐。

2
谢谢。我把它改成了pg_catalog。 ALTER EXTENSION pg_trgm SET SCHEMA pg_catalog; 看起来它能工作。 - Emerson R Orci
1
@user3491961:但是pg_catalog不是一个好主意。这应该为系统对象保留。将扩展安装到public模式或专用的extension模式,并确保在search_path中包含该模式。不要滥用pg_catalog - Erwin Brandstetter
谢谢。昨天开始学习Postgresql。感谢您。 - Emerson R Orci
在模式中创建扩展:CREATE EXTENSION IF NOT EXISTS btree_gin WITH SCHEMA extensions;``CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA extensions;执行后应该可以正常工作。 - bersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接