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

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

问题描述:

使用pg_dump创建Postgres纯文本SQL文件。当使用psql -f导入文本SQL文件时,一切似乎都运行良好。PostgreSQL search_path问题使用pg_dump创建普通的.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,则不包括该内容。

详情:

+0

我的理解是类似'search_pat'h,我在普通的SQL文件看到的只是对数据库对象,以便能够成功导入。即使源数据库在导出时设置了“search_path”,也不会真正为数据库设置“search_path”。 – varun7447

+0

@ varun7447:就像我说的:一个普通的'SET'只设置当前会话的'search_path'。 –

+0

太棒了,所以我只是试图看看是否有更好的方法来获取每个对象,并将源数据库中的设置与目标数据库中的相同。包括'search_path'。 – varun7447