2013-05-17 23 views
24

我試圖pg_dump,然後在不同的機器上我試圖導入SQL和填充數據庫,我看到pg_dump vs pg_dumpall?哪一個用於數據庫備份?

CREATE TABLE 
ERROR: role "prod" does not exist 
CREATE TABLE 
ERROR: role "prod" does not exist 
CREATE TABLE 
ERROR: role "prod" does not exist 
CREATE TABLE 
ERROR: role "prod" does not exist 
ALTER TABLE 
ALTER TABLE 
ALTER TABLE 
ALTER TABLE 
ALTER TABLE 
ALTER TABLE 
ALTER TABLE 
WARNING: no privileges could be revoked for "public" 
REVOKE 
ERROR: role "postgres" does not exist 
ERROR: role "postgres" does not exist 
WARNING: no privileges were granted for "public" 
GRANT 

這意味着我userrolesgrant信息不在pg_dump

在另一方面我們有pg_dumpall,我讀conversation,這不會導致我在哪裏?

問題
- 哪一個應該用於數據庫備份? pg_dumppg_dumpall
- 需求是我可以進行備份,並應該能夠導入到任何機器,它應該工作得很好。

+1

我不知道你的意思是「*我讀對話,這不會導致我在任何地方*」。該手冊非常清楚每個工具的功能。如果你需要導出用戶,那麼你必須使用pg_dumpall。 –

+1

這個問題應該移到http://dba.stackexchange.com/ – Stephan

回答

39

通常的過程是:

  • pg_dumpall --globals-only獲得用戶/角色的/ etc
  • pg_dump -Fc每個數據庫得到一個不錯的壓縮轉儲適用於pg_restore使用。

是的,這種吸吮。我真的想教pg_dump嵌入輸出到-Fc轉儲,但現在不幸,它不知道如何讓你自己做。

在寫作(9.4)的時候也有這種方法的一個討厭的警告:無論pg_dump,也不--globals-only模式pg_dumpall,將傾用戶訪問上DATABASE小號GRANT秒。


你也應該瞭解物理備份 - pg_basebackup,PgBarman和WAL歸檔,PITR等,這些報價多少「更細粒度的」復甦,到分鐘或個人事務。缺點是它們佔用更多空間,只能在同一平臺上恢復到相同的PostgreSQL版本,並備份所有數據庫中的所有表,無法排除任何內容。

+0

如何恢復全局文件?當我嘗試恢復它時出現一個錯誤:「輸入文件似乎不是有效的歸檔文件(太短?)」。 – Umagon

+1

@Umagon使用'psql -f globals.sql' –