将PostgreSQL扩展安装到所有模式

Cla*_*ash 32 postgresql

我正在使用PostgresQL 9.1.1尝试在所有模式上使用扩展unaccent.

所以我运行了命令CREATE EXTENSION unaccent;.哪个有效,但仅适用于当前设置的架构search_path.所以这意味着如果我改变search_path,我就不能再打电话了unaccent.如何使此扩展可用于特定数据库中的所有模式?

提前致谢!

a_h*_*ame 49

接受的答案是一个糟糕的建议.不要安装扩展到pg_catalog架构.

CREATE EXTENSION unaccent;将扩展安装到公共模式中.为了实现它,只需在更改search_path时包括:

set search_path = my_schema, public;
Run Code Online (Sandbox Code Playgroud)

或者更好地创建包含所有扩展的模式,然后始终将该模式附加到search_path.

create schema extensions;

-- make sure everybody can use everything in the extensions schema
grant usage on schema extensions to public;
grant execute on all functions in schema extensions to public;

-- include future extensions
alter default privileges in schema extensions
   grant execute on functions to public;

alter default privileges in schema extensions
   grant usage on types to public;
Run Code Online (Sandbox Code Playgroud)

现在安装扩展程序:

create extension unaccent schema extensions;
Run Code Online (Sandbox Code Playgroud)

然后在search_path中使用include该模式

set search_path = my_schema, extensions;
Run Code Online (Sandbox Code Playgroud)

如果您不想为您创建的每个新数据库重复上述步骤,请在连接到template1数据库时运行上述步骤.您甚至可以通过编辑postgresql.conf或使用在默认search_path中包含扩展架构alter system


cc *_*ung 17

有同样的问题,但@Richard Huxton的回答导致了正确的解决方案:

create extension unaccent schema pg_catalog;
Run Code Online (Sandbox Code Playgroud)

这个有效!!

正如理查德所说,pg_catalog自动添加(默默地)给每个人search_path.添加的扩展程序将被发现.

恕我直言,这是很多优于schema.func() 如果扩展是全球性的.

例如,我使用了很多模式.我使用模式PUBLIC进行调试 - 一切都应该在自己的模式中.如果PUBLIC中存在某些内容,那就错了.

创建扩展pg_catalog可以使所有模式保持干净,并让模式本身就像它是核心postgres的一部分一样工作.

  • 我强烈建议创建一个新的`unaccent`模式并在其中创建它,然后将该模式添加到`search_path`.更清洁以避免弄乱系统目录,并将其置于新架构中并不会阻止您在搜索路径上使用它. (6认同)
  • 这是一个糟糕的建议. (5认同)

Ric*_*ton 12

你没有.如果您愿意,您可以随时将其称为完全合格.

SELECT <schema>.<function>(...)
Run Code Online (Sandbox Code Playgroud)

事实上,我认为内置函数始终可用的唯一原因是PG将pg_catalog添加到search_path的末尾,无论你做什么.

  • 需要注意的重要事项l:`pg_catalog`在任何其他模式之前添加为`search_path`的***first***项(可以通过在`search_path`中明确提到`pg_catalog`来更改).任何其他方法都是不明智的:http://stackoverflow.com/questions/25068040/when-how-are-default-value-expression-functions-bound-with-regard-to-search-pa/25068681#25068681手册:http://www.postgresql.org/docs/current/interactive/ddl-schemas.html#DDL-SCHEMAS-PATH (2认同)