使用pg_dump
創建Postgres純文本SQL文件。當使用psql -f
導入文本SQL文件時,一切似乎都運行良好。PostgreSQL search_path問題使用pg_dump創建普通的.sql文件
但新導入的數據庫缺少search_path
。源數據庫有search_path
,我期望目標數據庫具有相同的。在編輯器中查看純SQL文件,我看到SET search_path
命令。那麼這是一個問題還是我錯過了什麼?
使用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