2

我一直在努力將Postgresql數據庫從8.4升級到9.1。我遇到了無數的問題(可能與Ubuntu的文件展示位置有關),但我認爲我看到了終點線。 Pg_upgrade幾乎可以正常工作,但它到達第一個數據庫'template0'時會失敗,因爲它'已經存在'。Postgresql 8.4-> 9.1,由於pg_upgrade失敗,因爲數據庫'template0'存在

psql:/var/lib/postgresql/pg_upgrade_dump_globals.sql:36: ERROR: database "template0" already exists 

There were problems executing "/usr/lib/postgresql/9.1/bin/psql" --set ON_ERROR_STOP=on --no-psqlrc --port 5432 --username "postgres" -f "/var/lib/postgresql/pg_upgrade_dump_globals.sql" --dbname template1 >> "/dev/null" 
Failure, exiting 

此模板0數據庫當然是每個新集羣的一部分,不能刪除。我嘗試在新集羣上重命名template0和template1(爲了安全起見)(重新創建後),但隨後的pg_upgrade調用也失敗了,但這次抱怨說新的集羣上不存在template1。

"/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1 

connection to database failed: FATAL: database "template1" does not exist 

unable to connect to new postmaster started with the command: "/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1 
Failure, exiting 

我再次嘗試它只重命名template0和它再次失敗,但這次有一些來自postgres本身的斷言問題。

executing: SELECT datcollate, datctype FROM  pg_catalog.pg_database WHERE datname = 'template0' 

pg_upgrade: /build/buildd/postgresql-9.1-9.1.3/build/../contrib/pg_upgrade/check.c:310: set_locale_and_encoding: Assertion `PQntuples(res) == 1' failed. 
Aborted (core dumped) 

完整性檢查的注意事項:如果有人認爲「只是做一個完整的SQL轉儲和恢復它不工作很好要麼,這就是爲什麼我試圖讓pg_upgrade工作。我還確保每次升級失敗時都會丟棄並重新創建羣集,以防止任何故障遺留問題繼續發生,從而導致升級失敗。數據庫位於亞馬遜捲上,所以我不能破壞任何東西並始終有備份。我在Ubuntu 12上,並且兩個數據庫並排安裝。

我目前沒有涉及到postgresql源代碼的想法,並非常感謝接下來要嘗試的任何幫助和建議。提前致謝。

+0

偏離主題。你應該問問http://dba.stackexchange.com/ –

回答

6

停止。喝一杯茶/咖啡,然後坐下。

  1. 請確保您同時安裝了9.1和8.4。 Debian允許這樣做,所以大概ubuntu也是如此。
  2. 使用9.1版本的pg_dump,從8.4轉儲每個數據庫,併爲用戶轉儲一個dumpall,或者只是手動重新創建它們。
  3. 使用9.1 pg_restore,以用戶postgres和--create標誌一起恢復數據庫。

如果這些步驟中存在特定問題,您需要記下這些步驟並提供詳細信息。哦 - 詳細的逐步建議最好的地方可能是postgresql-general郵件列表(請參閱網站了解詳情)。你可以在那裏抽出時間,讓每一步都正確。

在猜測你正試圖做pg_upgrade到一個現有的initdb編輯的目錄,我不認爲它期望。在任何情況下,dump + restore都是最簡單的方法 - 它也爲您提供了數據庫的備份副本。

相關問題