使用pg_dump
创建了Postgres纯文本SQL文件。当使用psql -f
导入文本SQL文件时,一切运行正常。
但新导入的数据库缺少search_path
。源数据库具有search_path
,我希望目标数据库具有相同的。在编辑器中查看普通的SQL文件,我看到了SET search_path
命令。这是问题还是我遗漏了什么?
最佳答案
search_path
是每个会话设置的,可以随时更改。可以在特定数据库中存储数据库、角色甚至角色的预设。可以使用如下命令设置:
ALTER DATABASE test SET search_path = blarg,public;
ALTER ROLE foo SET search_path = blarg,public;
等。
或者你想从
postgresql.conf
中的常规设置开始?请参阅下面的链接。平原:
SET search_path = blarg,public;
就像您在SQL文件中看到的那样,只为在其中执行的会话设置
search_path
。潜在的问题可能是这个(quoting the manual):
数据库角色是跨数据库群集安装的全局角色(和
不是每个数据库)。
大胆强调我的。
具有
pg_dump
的数据库备份(不包括具有pg_dumpall
的整个群集,不包括全局对象)不包括角色。如果为角色设置了默认值search_path
,则不包括该值。细节:
How does the search_path influence identifier resolution and the "current schema"