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