永久设置 Postgreql 模式路径

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

SET SCHEMA PATH a,b,c

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

我怎么才能让它永久存在呢?

173014 次浏览

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

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

需要知道两件重要的事情:

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

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

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

或者在用户或角色级别:

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

或者在 role + 数据库级别(感谢 Chris 指出这一点!) :

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

或者,如果在所有数据库中都有一个共同的默认模式,则可以使用 Search _ path选项在配置文件中设置系统范围的默认值。

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

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

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

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

如果您只使用一台机器上的一个数据库,那么可以将默认模式保存到 ~/.psqlrc:

set search_path to a,b,c

更多关于 给你的信息。如果你想存储默认的连接信息,这样你就可以简单地运行 psql每次,你需要 使用环境变量:

export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=database
export PGUSER=username