永久设置Postgresql架构路径

时间:2010-05-20 16:03:58

标签: sql postgresql

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

SET SCHEMA PATH a,b,c

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

如何使其成为永久性的?

3 个答案:

答案 0 :(得分:138)

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

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

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

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

答案 1 :(得分:104)

您可以在数据库级别设置默认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>来创建数据库。

答案 2 :(得分:15)

Josh是对的,但他遗漏了一个变种:

SELECT e1.id, e1.name, COUNT(*) somealias
FROM YourBundle:Element e1
LEFT JOIN e1.childs e2
WHERE e1.parent_id = xxx
AND e1.element_type_id = xxx
GROUP BY e1.id

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