使用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"

09-11 19:56