永久设置Postgresql模式路径


135

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

SET SCHEMA PATH a,b,c

我似乎只对Mac上的一个查询会话有效,当我关闭查询窗口后,path变量将自身设置回默认值。

我如何使其永久化?


我认为是SET search_path TO a,b,c; 如答案所述,而不是设置模式路径a,b,c;
阿曼多

Answers:


168

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

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

要了解的两个重要事项:

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

19
同样值得注意的是,在a,b,c枚举中不要显式使用引号。在过去15分钟内
亲近对方

4
@ Jmoney38不要使用单引号,但是对于非简单模式名称,必须使用双引号。
vitaly-t

136

您可以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 <database_name> TEMPLATE <template_name>创建数据库。


9
对于那些从PSQL命令行想知道你可以通过\ DN列表架构
BKSpurgeon

3
需要断开会话并再次连接才能使设置生效。
isapir

哦,保佑你。从SQL Server转到PG,所以这对我来说是全新的(而且很奇怪)
Nate Anderson

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.