Postgresql データベースを 8.4 から 9.1 にアップグレードする作業を行っています。数え切れないほどの問題に遭遇しました (Ubuntu のファイル配置に関係している可能性があります) が、最終ラインは見えていると思います。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
もちろん、この template0 データベースはすべての新しいクラスターの一部であり、削除することはできません。(再作成した後) 新しいクラスターで 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 を機能させようとしています。また、過去の失敗の遺物がアップグレードに失敗し続けるのを防ぐために、アップグレードが失敗するたびにクラスターをドロップして再作成するようにしました. データベースは Amazon ボリューム上にあるため、実際に何かを壊すことはできず、常にバックアップを取っています。私はubuntu 12を使用しており、両方のデータベースを並べてインストールしています。
私は現在、postgresql ソースにアクセスする必要のないアイデアがありません。次に何を試すかについて、助けや提案をいただければ幸いです。前もって感謝します。