Windows

如何將 PostgreSQL 數據庫的文件系統級副本(不是轉儲)還原到另一台 PC

  • November 16, 2016

我是 PostgreSQL 新手。我必須恢復在 widows XP 機器上執行的數據庫。

我有 postgres 的 zip 文件夾。

我已經在另一台 PC 上提取了 postgres 安裝並開始使用 initDB 並創建了一個新數據庫,我能夠登錄,但我看不到任何舊表。

您能否發布您在另一台 Windows XP 機器上啟動伺服器的步驟以及如何恢復舊數據文件夾中的表和數據?

理想情況下,您應該使用 pg_dump 進行轉儲,這會使這變得容易得多。壞辦公室的人,沒有餅乾。

因為您擁有來自同一版本的二進製文件,所以可以省去一些麻煩。

  • 將您的備份目錄解壓縮到一個方便的地方,在那裡您擁有普通使用者帳戶的完全讀/寫權限。我假設它在您的桌面上:C:\Users\Myusername\Desktop\postgresql- 出於本範例的目的。

假設c:\users\myusername\desktop\postgresql文件夾包含名為bindatalib等的文件夾:

  • 打開一個cmd.exe外殼
  • cd Desktop\postgresql
  • bin\pg_ctl.exe start -D C:\users\myusername\desktop\postgresql\data
  • bin\psql.exe -U mydbusername mydb

如果 psql 使用\q命令連接 OK 斷開連接,則立即轉儲數據庫:

  • bin\pg_dump.exe -Fc -U mydbusername -f mydb.dbbackup mydb

…並使用目前版本的 pg_restore 將其恢復到現代 PostgreSQL 版本。

如果您在恢復到 9.0 或 9.1 等較新版本時遇到問題,您可能必須使用較新版本中的 pg_dump 連接到舊數據庫並進行轉儲,而不是使用 8.2 中的 pg_dump 進行轉儲。如果您不想設置為通過網路轉儲,可以將 pg_dump 從新機器複製到舊機器;只需將整個 `bin’ 目錄從新的 PostgreSQL 版本複製到舊機器上的某個位置,然後從那裡執行 pg_dump。僅複製 pg_dump.exe 將不起作用,因為它需要 libpq 和其他庫。

請不要嘗試繼續執行 8.2,這是一個過時且不受支持的版本。進入 9.0 或 9.1。這可能需要對您的程式碼進行一些更改;請參閱自您發布以來每個主要 .0 版本的發行說明,例如 8.3.0、8.4.0、9.0.0 和 9.1.0 以獲取升級資訊。

現在立即修復您的備份程序以安排每日 pg_dump,這樣您就不會再發生這種情況了

如果您沒有PostgreSQL 二進製文件,您會執行以下操作。當我看到你在 zip 文件中有二進製文件時,我已經寫好了,我會把它留在這裡供其他人使用。

  • 安裝PostgreSQL 8.2。是的,它必須是 8.2.x。沒有其他版本可用於此目的,因為 PostgreSQL 原始數據文件僅在同一主要版本中兼容。因為它是一個舊版本,它可能無法與已安裝的目前版本共存,因此您可能必須使用備用機器或虛擬機。
  • 安裝 8.2 並知道它正在使用安裝程序創建的空數據庫後,從服務控制面板將其關閉(開始 -> 執行 -> services.msc)
  • 將數據目錄重命名為data-empty. 我認為這是C:\Program Files\PostgreSQL\8.2\data8.2,但我不記得了。
  • 將您的舊數據目錄解壓縮到您剛剛移動安裝程序創建的數據目錄的位置,因此它具有相同的名稱和位置。如果您執行的是非管理員或 UAC 管理員帳戶,您實際上可能必須將其解壓縮到其他地方,然後將其移動到位。
  • 獲取解壓縮數據目錄的屬性。在安全選項卡中,給予“postgres”使用者完全控制權並將其應用於其中的所有文件和文件夾。這個很重要; 如果沒有正確的權限,數據庫將無法工作,並且解壓縮的副本將沒有正確的權限。
  • 從 services.msc 啟動 PostgreSQL 服務
  • 檢查以確保服務正確啟動。如果沒有,請在事件查看器中查找有關原因的資訊。還要檢查 datadir 目錄中的日誌,pg_log確保一切看起來都合理,那裡沒有錯誤。
  • 嘗試連接psql並查看您是否可以訪問您的數據。如果可以,請按照上面的建議進行轉儲。不要繼續使用過時的數據庫版本。

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