我一直在努力將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源代碼的想法,並非常感謝接下來要嘗試的任何幫助和建議。提前致謝。
偏離主題。你應該問問http://dba.stackexchange.com/ –