1

使用 . 创建了一个 Postgres 纯文本 SQL 文件pg_dump。使用psql -f一切导入文本 SQL 文件时似乎运行良好。

但是新导入的数据库缺少search_path. 源数据库有search_path,我希望目标数据库也有。在编辑器中查看纯 SQL 文件,我看到了SET search_path命令。那么这是一个问题还是我错过了什么?

4

1 回答 1

4

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为执行它的会话设置一个。

潜在的问题可能是这个(引用手册):

数据库角色在数据库集群安装中是全局的(而 不是每个单独的数据库)。

大胆强调我的。

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

细节:

于 2017-03-06T04:18:27.690 回答