我需要在Postgres中设置架构路径,这样我就不会每次都指定架构点表,例如schema2.table
。
设置架构路径:
SET SCHEMA PATH a,b,c
似乎只适用于mac上的一个查询会话,在关闭查询窗口后,路径变量将自身设置回默认值。
如何使其成为永久性的?
答案 0 :(得分:138)
(如果您没有对服务器的管理员访问权限)
ALTER ROLE <your_login_role> SET search_path TO a,b,c;
需要了解的两件重要事项:
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
在一个特定数据库中设置用户的搜索路径。