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
,则不包括该内容。
详情:
我的理解是类似'search_pat'h,我在普通的SQL文件看到的只是对数据库对象,以便能够成功导入。即使源数据库在导出时设置了“search_path”,也不会真正为数据库设置“search_path”。 – varun7447
@ varun7447:就像我说的:一个普通的'SET'只设置当前会话的'search_path'。 –
太棒了,所以我只是试图看看是否有更好的方法来获取每个对象,并将源数据库中的设置与目标数据库中的相同。包括'search_path'。 – varun7447