Postgresql

使用 pg_dump 將完整的 postgres 數據庫集群遷移到另一台機器

  • February 17, 2019

我指的是

如何獲得有效且完整的 PostgreSQL 數據庫備份和測試

在此範例/解決方案中,還原過程的哪一部分實際上是“創建數據庫沙箱”?我一直在尋找這個答案一段時間 - 似乎 pg_dump 沒有備份它為其創建備份的數據庫的名稱 - >當我只是備份(pg_dump)並恢復(psql)它時,我得到“數據庫沙箱不存在”。

那麼,如果我想用 pg_dump 備份和恢復整個集群,我是否必須在新伺服器上手動創建所有數據庫?我希望以後能夠恢復單個數據庫,所以 pg_dumpall 似乎不是正確的方法,或者是嗎?

您引用的問題有點混亂,我認為您最好不要提及它。它只是引入了誤解,然後部分地刪除了其中一些。

如果你想備份和恢復整個集群,你應該使用“pg_dumpall”,而不是“pg_dump”。在沒有任何限制性選項的情況下使用“pg_dumpall”將發出必要的“CREATE DATABASE”命令。

如果您使用選項執行“pg_dump” -C,它也會發出“CREATE DATABASE”命令。

我希望以後能夠恢復單個數據庫,所以 pg_dumpall 似乎不是正確的方法,或者是嗎?

如果你想在未來做一些不同的事情,那就在未來做一些不同的事情。“pg_dumpall” 保留您的選項。您可以恢復整個事物,然後刪除您不想要的數據庫。或者你可以恢復整個,然後重新轉儲你想要的東西。或者只是從原始伺服器中轉儲你想要的東西,如果它仍然存在的話。或者使用 vi 或 sed 或 awk 或 perl 來調整“pg_dumpall” .sql 文件,以便它只執行您想要的操作。

如果您不喜歡這些選項中的任何一個,您可以在每個單獨的數據庫中pg_dumpall -g添加一個。pg_dump -C如果您的主要案例是還原單個數據庫,但事先不知道它將是哪個數據庫,這將比以前的選項更快,並且可以在比原來更小的機器上執行。但是記錄起來也有點困難,而且文件之間更有可能不同步。

引用自:https://dba.stackexchange.com/questions/229964