Backup

PostgreSQL 備份/恢復

  • April 24, 2010

備份 postgresql 數據庫的最佳方法是什麼?

我嘗試使用 www.postgresql.org 上的文件,但在恢復時我總是遇到完整性錯誤。

現在我正在使用它進行備份:

pg_dump -U myuser -d mydatabase db.pg.dump

用於恢復:

pg_restore -c -r -U myuser -d mydatabase db.pg.dump

但我沒有得到想要的結果..

編輯:我應該注意,我的數據庫有很多外鍵..

我看到的一些錯誤是:

ERROR:  current transaction is aborted, commands ignored until end of transaction block

ERROR:  zero-length delimited identifier at or near """"
LINE 1: ..._text_id_fkey" FOREIGN KEY ("text_id") REFERENCES ""."wiki_t...

從 pg_restore 手冊頁:

pg_restore 是一個實用程序,用於從由 pg_dump(1) 以非純文字格式之一創建的存檔中恢復 PostgreSQL 數據庫。

從 pg_dump 手冊頁:

轉儲可以腳本或存檔文件格式輸出。腳本轉儲是純文字文件,其中包含將數據庫重建到保存時的狀態所需的 SQL 命令。要從這樣的腳本中恢復,請將其提供給 psql(1)。即使在其他機器和其他架構上,腳本文件也可用於重建數據庫;甚至在其他 SQL 數據庫產品上也進行了一些修改。

替代歸檔文件格式必須與 pg_restore(1) 一起使用來重建數據庫。它們允許 pg_restore 選擇要恢復的內容,甚至可以在恢復之前重新排序項目。

您並沒有告訴它以非純文字格式轉儲。您告訴它恢復非純文字格式。顯然這是行不通的。

從 pg_dump 手冊頁:

EXAMPLES
  To dump a database called mydb into a SQL-script file:

  $ pg_dump mydb > db.sql

  To reload such a script into a (freshly created) database named newdb:

  $ psql -d newdb -f db.sql

  To dump a database into a custom-format archive file:

  $ pg_dump -Fc mydb > db.dump

  To reload an archive file into a (freshly created) database named newdb:

  $ pg_restore -d newdb db.dump

引用自:https://serverfault.com/questions/135510