PostgreSQL search_path 使用 pg_dump 创建普通 .sql 文件的问题

PostgreSQL search_path issue using pg_dump created plain .sql file

使用 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 中的常规设置?请参阅下面的 link。

普通:

SET search_path = blarg,public;

就像您在 SQL 文件中看到的那样,只为执行它的会话设置一个 search_path

潜在的问题可能是这个 (quoting the manual):

Database roles are global across a database cluster installation (and not per individual database).

大胆强调我的。

具有 pg_dump 数据库 的备份(不是具有 pg_dumpall 的整个集群,不包括全局对象),不包括角色。如果您为角色设置了默认 search_path,则不包括在内。

详情:

  • How does the search_path influence identifier resolution and the "current schema"