如何使用安装在不同架构中的扩展?
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)
错误消息提示您的参数未被视为文本,因此您可能写了一个反引号(重音符号)而不是撇号。
【讨论】:
以上是关于如何使用安装在不同架构中的扩展?的主要内容,如果未能解决你的问题,请参考以下文章