私のソフトウェア プロセスは、ローカル PostgreSQL クラスタ内の特定のデータベースの存在に依存しています。PostgreSQL と私のソフトウェア プロセスはどちらも、システムの起動時に upstart によって開始されます。データベースが正しい状態にあることを確認するために、PostgreSQL の起動後、ソフトウェア プロセスの開始前にスクリプトが実行されます。
このスクリプトは、pg_dump を使用してデータベースのスキーマをダンプします。サーバーが実行されていないか、接続の準備ができていない場合、次のように表示されます
$ pg_dump -U postgres -s testdb
pg_dump: [archiver (db)] connection to database "testdb" failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
データベースが存在しない場合、次のように表示されます
$ pg_dump -U postgres -s testdb
pg_dump: [archiver (db)] connection to database "testdb" failed: FATAL: database "testdb" does not exist
クラスタにデータベース 'testdb' が含まれていても、pg_dump の呼び出しでデータベースが存在しないと報告されるタイム ウィンドウがあるようです。サーバーの起動とスクリプトの実行の間に短いスリープを追加することで、この問題を回避できます。任意の時間のスリープを含まないソリューションを希望します。助言がありますか?
32 ビット Ubuntu 12.04 LTS で PostgreSQL 9.1 を実行しています。