永久设置Postgresql架构路径

Nak*_*akh 122 sql postgresql

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

SET SCHEMA PATH a,b,c
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能永久化?

Mil*_*dev 153

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

ALTER ROLE <your_login_role> SET search_path TO a,b,c;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 另外值得注意的是明确地不要在a,b,c枚举周围使用引号.过去15分钟的手到额头...... (19认同)
  • @Jmoney38不使用单引号,但非简单模式名称需要双引号. (3认同)
  • 对我来说,重新连接到数据库是必要的。在“ALTER ROLE”之后的“SHOW SEARCH_PATH”似乎一开始不起作用。 (2认同)

jos*_*rry 119

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

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;
Run Code Online (Sandbox Code Playgroud)

或者在用户或角色级别:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;
Run Code Online (Sandbox Code Playgroud)

或者,如果所有数据库中都有一个通用的默认模式,则可以使用search_path选项在配置文件中设置系统范围的默认模式.

创建数据库时,默认情况下会从名为template1的隐藏"模板"数据库创建数据库,您可以更改该数据库,以便为将来创建的所有数据库指定新的默认搜索路径.您还可以创建另一个模板数据库并用于CREATE DATABASE <database_name> TEMPLATE <template_name>创建数据库.

  • 对于那些从psql命令行感到疑惑的人,你可以用\ dn列出模式 (7认同)
  • 需要断开会话并再次连接才能使设置生效。 (3认同)

Chr*_*son 18

Josh是正确的,但他遗漏了一个变化:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;
Run Code Online (Sandbox Code Playgroud)

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