カスタムLinuxディストリビューションを実行している仮想マシンでPostgreSQL 8.2.1から9.2へのアップグレードをテストしています。アップグレード手順は次のとおりです。
pg
サービスを開始する- すべてのDBをバキュームします(これが必要かどうかは不明です)
- バックアップ
pg_dumpall
pg
サービスを停止します- データが格納されているディレクトリを移動します(
/var/pg
;これはシンプルな単一サーバーのセットアップです) - PostgreSQL 9.2をインストールする
initdb
- サーバーを起動する
- ダンプされたデータを復元する
reindexdb
すべてのDBreferential_constraints
ビューを再作成する- すべてのDBをバキュームします(このアップグレード後にAFAIKが必要です)
この手順は、1つのホストで問題なく動作し、問題なくバックアップおよび復元できます。データベースポイントが異なる1〜7の別のマシンでは正常に動作しますが、sleep 1
after を追加しない限りサーバーは起動しません。initdb
それでも、「データベースシステムが起動中」であるため、ダンプされたデータを復元できません。これらのひどいハックを除いて、これに対処する標準的な方法は何ですか?
sleep
どちらかの操作の前に、十分な時間をかけてください。- 動作するまで、または十分なタイムアウトになるまでループするか、
- 簡単なクエリを受け入れるか、タイムアウトに達するまでループします。
編集:「ソリューション」は結局機能しませんでした。データベースが復元を実行する準備ができていることを確認するには何が必要ですか?
initdb
は同期的に実行されるため、サーバーの起動時にinitdb
はすでに正常に終了しています。
initdb
終了ステータスをテストできますか?設定が完了すると作業が完了すると思います。