【问题标题】:How to use % operator from the extension pg_trgm?如何使用扩展 pg_trgm 中的 % 运算符?
【发布时间】:2014-04-10 13:17:21
【问题描述】:

我安装了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. 

运行%<-> 运算符需要什么?

【问题讨论】:

    标签: sql postgresql pattern-matching search-path


    【解决方案1】:

    这很可能是search_path 的问题。运行:

    SHOW search_path;
    

    您安装pg_trgm 的架构是否包括在内?如果没有,请包含它。

    或者,您可以使用 OPERATOR() construct 对函数进行模式限定,甚至运算符:

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

    使其独立于search_path

    【讨论】:

    • 谢谢。我将其更改为 pg_catalog。 ALTER EXTENSION pg_trgm SET SCHEMA pg_catalog;好像行得通。
    • @user3491961:但是pg_catalog 是个坏主意。这应该为系统对象保留。将扩展安装到 public 架构或专用 extension 架构,并确保在 search_path 中包含架构。不要不要为此滥用pg_catalog
    • 谢谢。昨天开始学习Postgresql。谢谢你。
    • 在架构中创建扩展:CREATE EXTENSION IF NOT EXISTS btree_gin WITH SCHEMA extensions; CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA extensions; 应该在此之后工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2023-02-25
    • 2016-06-12
    • 2022-01-03
    相关资源
    最近更新 更多