postmasterの起動に失敗する理由として,いくつかよく見うけられるものが あります.まずpostmasterのログファイルを確認するか,あるいは標準 (エラー)出力をリダイレクトせずにコマンドラインからpostmasterを 起動してください.postmasterがどんな文句を言っているのかを聞いてみま しょう.エラーが出てきても,そのメッセージ自身が適切な説明を与えて くれることがあります.しかしそうでないものもありますので,ここに 挙げておきます.
FATAL: StreamServerPort: bind() failed: Address already in use Is another postmaster already running on that port? (致命的なエラー: StreamServerPort: bind()の失敗 : 既にアドレスが使われています. 同じポートで他のpostmasterが動作していませんか?)メッセージの意味は大抵の場合書かれているとおりで,すでに実行中の postmasterと同じポートで,誤ってふたつ目のpostmasterを立ち上げて しまったということです.しかし,もしカーネルのエラーメッセージが "Address already in use(既にアドレスが使われています)"−全く同じ表記 でないかもしれませんが−と違うなら,これはたぶん別の問題です.たとえば postmasterを特権ポートで立ち上げようとすると,こんなメッセージを出して くるでしょう.
$ postmaster -i -p 666 FATAL: StreamServerPort: bind() failed: Permission denied Is another postmaster already running on that port? (致命的なエラー: StreamServerPort: bind() の失敗: パーミッションがありません 同じポートで他のpostmasterが動作していませんか?)
IpcMemoryCreate: shmget failed (Invalid argument) key=5440001, size=83918612, permission=600 FATAL 1: ShmemCreate: cannot create region (IpcMemoryCreate: shmget の失敗 (引数が不適切です) key=5440001, size=83918612, permission=600 致命的なエラー 1: ShmemCreate: 領域を獲得できませんでした)このようなメッセージだと,カーネルの共有メモリサイズの上限がPostgresの 作成しようとしているバッファ領域に比べて足らない,ということになりそう です.(あるいは,カーネルにSystemVの共有メモリ機能がまったく 組み込まれていない,ということもありえます) 一時的な対応としてなら,通常よりも小さいバッファの設定でpostmasterを 起動してみることはできます(-Bオプション).しかし最終的にはカーネル の共有メモリの上限を上げざるを得ないでしょう.このメッセージは, postmasterを同じサーバ上でいくつも立ち上げようとしている状況で 必要になったメモリ空間全体が,カーネルの上限を超えた場合にも表示される ことがあります.
IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600 IpcSemaphoreCreate: semget の失敗 (デバイスに空きがありません) key=5440026, num=16, permission=600これはディスクスペースを使い切ってしまったということでは ありません.そうではなく,カーネルのSystemV セマフォの上限が,Postgresの作成しようとしている数に足らないという ことです.前項と同じように,今度はバックエンドの最大数を減らして postmasterを立ち上げれば,この問題に対処できると思います (-N オプション).が,やはり最後にはカーネルの上限を上げることに なるでしょう.