如何使用安装在不同架构中的扩展?

Posted

技术标签:

【中文标题】如何使用安装在不同架构中的扩展?【英文标题】:How do I use an extension installed in a different schema? 【发布时间】:2014-05-21 14:19:35 【问题描述】:

我添加了一个扩展,我的安装显示了已安装的模块,

mydb=# \dx
                                   List of installed extensions
 Name   | Version |   Schema   |                                  Description                            
--------+---------+------------+-------------------------------------------------------------------
pg_trgm | 1.0     | extensions | text similarity measurement and index searching based on trigrams
plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

但是当我去使用它时,我得到了一个错误,

mydb=# select similarity('hello','hell');
ERROR:  function similarity(unknown, unknown) does not exist
LINE 1: select similarity('hello','hell');
           ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

还有其他步骤可以使用扩展提供的功能吗?

【问题讨论】:

【参考方案1】:

模块已安装到架构 extensions。我猜该架构不在您的搜索路径中,因此找不到该功能。试试

select extensions.similarity('hello','hell');

如果您不想完全限定函数名称,您只需将该架构添加到您的 search_path:

alter user your_pg_user set search_path = public,extensions;

如果仍然出现错误,您的 Postgres 用户可能没有必要的权限来调用这些函数。在这种情况下,以超级用户身份登录(通常为 postgres)并授予权限:

grant all on schema extensions to your_pg_user;

【讨论】:

【参考方案2】:

它应该工作。这里是一个 psql 协议:(对不起,系统是德语)

str@s131-intel:~> psql
psql (9.2.7)

strobel=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
strobel=# \df
                                                          Liste der Funktionen
 Schema |          Name          | Ergebnisdatentyp |                            Argumentdatentypen                             |  Typ   
--------+------------------------+------------------+---------------------------------------------------------------------------+--------
 public | flipper                | boolean          |                                                                           | normal
 public | gin_extract_query_trgm | internal         | text, internal, smallint, internal, internal, internal, internal          | normal
 public | gin_extract_value_trgm | internal         | text, internal                                                            | normal
 <cut>
 public | gtrgm_union            | integer[]        | bytea, internal                                                           | normal
 public | set_limit              | real             | real                                                                      | normal
 public | show_limit             | real             |                                                                           | normal
 public | show_trgm              | text[]           | text                                                                      | normal
 public | similarity             | real             | text, text                                                                | normal
 public | similarity_dist        | real             | text, text                                                                | normal
 public | similarity_op          | boolean          | text, text                                                                | normal
(20 Zeilen)

strobel=# select similarity('hallo', 'hello');
 similarity 
------------
   0.333333
(1 Zeile)

错误消息提示您的参数未被视为文本,因此您可能写了一个反引号(重音符号)而不是撇号。

【讨论】:

以上是关于如何使用安装在不同架构中的扩展?的主要内容,如果未能解决你的问题,请参考以下文章

设计模式如何提升 vivo 营销自动化业务扩展性 | 引擎篇01

Lync Server 使用命令在架构主机上扩展架构

如何验证XML架构中的命名约定

如何正确封装对具有(几乎)相同架构的不同数据库系统的访问?

CMPT3:如何扩展AD架构?

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段