web-dev-qa-db-ja.com

致命的なエラーロックファイル「postmaster.pid」は既に存在します

最近、Homebrewを使用してMac(El Capitan 10.11.4、Postgresはバージョン9.5.1)にPostGISをインストールしました。次の手順に従います- http://morphocode.com/how-to-install- postgis-on-mac-os-x /

を使用してPostgresを起動しようとすると

pg_ctl -D /usr/local/var/postgres start 

次のエラーが表示されます。

$ FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 280) running in data directory "/usr/local/var/postgres"?

それで、私はこれに対処する方法を研究するのに数時間を費やしましたが、役に立ちません。

特に、スーパーユーザーの回答で推奨されているようにPIDを殺そうとしました- https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists- (上記の場合、kill 208)を実行しましたが、Postgresを再び起動しようとするとすぐに、

PID番号が異なっていても、同じエラーが発生しました。 postmaster.pidファイルを削除するように勧められた人が数人いましたが、最後の手段として保存する必要があるかもしれません...

確かに、これを修正する方法がわからない理由の一部は、私はポストマスターが何であるかさえ本当にはっきりしていないということです-私はこのすべてについて学び始めています。

psql db_nameコマンドを介してPostgresデータベースにアクセスすることは、それが価値があることのために、うまく機能します。

18
skwidbreth

Postmaster は主なPostgreSQLプロセスです。すでに実行されているPostgreSQLを起動しようとしています(接続できると言っている)。プロセスのそのステップをスキップしてください。

4
Jakub Kania

TL; DR:データベースに接続できるので、サーバーを再度起動する必要はありません-既に実行されています。


pg_ctl は、PostgreSQLサーバーを制御するために使用されます。サーバーはすでに開始されているため、コマンドは次のようになります。

pg_ctl -D /usr/local/var/postgres start

postmaster.pidにロックがあることを示すエラーを返します。これは、そのPIDで実行されているサーバーが既に存在するため、trueです。


2つの方法があります。

  1. 最も基本的な方法-そのステップをスキップして、サーバーはすでに実行されています
  2. 不要な操作の実行-サーバーを停止してから、再起動します。

サーバーの実行を停止できます:

pg_ctl -D /usr/local/var/postgres stop

これにより、ポストマスターをロックできなくなり、コマンドを使用して再度起動できるようになります。

19

他の人を助けるためにこれを投稿する:

ラップトップがクラッシュしたときにハードリブートした後、OPと同じ問題が発生していました。次のコマンドを実行して、postmaster.pidに関連付けられているPIDを確認できました。

cat /usr/local/var/postgres/postmaster.pid

表示される最初の番号はPIDです。 Activity Monitorを見ると、Postgresが実行されていることがわかりましたが、示されているものと一致するPID番号はありませんでした。

スーパーユーザーの回答に記載されている手順の代わりに、ラップトップを適切に再起動し、ターミナルを開いて実行しました

brew services restart postgresql

これはpostmaster.pidを削除することなく機能しました。他のいくつかの投稿で推奨されているものを見ました。時にはそれが機能するシンプルなソリューションです。

12
ludditedev

OSxで、システムが予期せずシャットダウンすることがよくあります。

ファイルを削除するだけで_postmaster.pid

cd Library/Application Support/Postgres/var-{postgres-version}

そして、postmaster.pidファイルを削除します

このコマンドを使用してPostgresを再起動します

pg_ctl -D /usr/local/var/postgres restart
5
Sobin Sunny