2017-03-06 178 views
1

使用pg_dump創建Postgres純文本SQL文件。當使用psql -f導入文本SQL文件時,一切似乎都運行良好。PostgreSQL search_path問題使用pg_dump創建普通的.sql文件

但新導入的數據庫缺少search_path。源數據庫有search_path,我期望目標數據庫具有相同的。在編輯器中查看純SQL文件,我看到SET search_path命令。那麼這是一個問題還是我錯過了什麼?

回答

1

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