【问题标题】:Permanently Set Postgresql Schema Path永久设置 Postgresql 模式路径
【发布时间】:2022-04-11 01:48:33
【问题描述】:

我需要在 Postgres 中设置模式路径,这样我就不会每次都指定模式点表,例如schema2.table。 设置架构路径:

SET SCHEMA PATH a,b,c

似乎只适用于 mac 上的一个查询会话,在我关闭查询窗口后,路径变量将自身设置回默认值。

我怎样才能让它永久化?

【问题讨论】:

  • 我认为是 SET search_path TO a, b,c;正如答案所说,而不是 SET SCHEMA PATH a,b,c;

标签: sql postgresql


【解决方案1】:

(如果您没有对服务器的管理员访问权限)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

需要了解的两个重要事项:

  1. 当架构名称不简单时,需要用双引号括起来。
  2. 设置默认模式a, b, c 的顺序很重要,因为它也是查找表的模式的顺序。因此,如果您在多个默认架构中具有相同的表名,则不会有歧义,服务器将始终使用您为 search_path 指定的第一个架构中的表。

【讨论】:

  • 另外值得注意的是明确不要在 a,b,c 枚举周围使用引号。过去 15 分钟的手到额头...
  • @Jmoney38 不使用单引号,但非简单模式名称需要双引号。
  • 是的,这些是identifiers,而不是字符串。
  • 对我来说,重新连接数据库是必要的。 SHOW SEARCH_PATH 紧跟在 ALTER ROLE 之后似乎一开始不起作用..
【解决方案2】:

您可以在数据库级别设置默认search_path

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

或者在用户或角色级别:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

或者,如果您在所有数据库中有一个共同的默认架构,您可以在配置文件中使用 search_path 选项设置系统范围的默认架构。

创建数据库时,默认情况下它是从名为 template1 的隐藏“模板”数据库创建的,您可以更改该数据库以为将来创建的所有数据库指定新的默认搜索路径。您还可以创建另一个模板数据库并使用CREATE DATABASE &lt;database_name&gt; TEMPLATE &lt;template_name&gt; 创建您的数据库。

【讨论】:

  • 对于那些想知道 psql 命令行的人,您可以通过 \dn 列出架构
  • 需要断开会话重新连接才能使设置生效。
  • 哦,祝福你。从 SQL Server 来到 PG,所以这对我来说是全新的(和奇怪的)
  • 文档将其作为用户名或角色名。当我创建为角色名称(组名)时它不起作用。它给我的错误是 ERROR:schema public 的权限被拒绝。我授予使用和默认公开,但角色的权限不起作用。请对此有任何想法或帮助?
  • 感谢您的帮助。
【解决方案3】:

乔希是对的,但他遗漏了一个变化:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

在一个特定的数据库中为用户设置搜索路径。

【讨论】:

  • 也非常有用。谢谢
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2014-08-06
  • 2012-02-18
  • 2017-01-15
  • 2020-07-28
  • 2020-09-15
相关资源
最近更新 更多