macos – “FATAL: ロックファイル “postmaster.pid” が既に存在します

database homebrew macbook macos postgresql

brew install postgres経由でpostgresを再インストールしたところです

initdb /usr/local/var/postgres -E utf8を実行しましたが、これが出ました

The files belonging to this database system will be owned by user "atal421".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".

ということで、rm -rfのpostgresフォルダを開いて、再度実行してみました

 initdb /usr/local/var/postgres -E utf8

何も問題ないと書いてあった

Success. You can now start the database server using:

postgres -D /usr/local/var/postgres

ということで、そのコマンドを実行してみたところ

postgres -D /usr/local/var/postgres


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

今、私のアクティビティモニターを見ると、6つのインスタンスのpostgressが表示されています

どうすれば直るのでしょうか?

  80  AdamT  2013-02-16


ベストアンサー

公務発表:postmaster.pidは絶対に削除しないでください。マジかよ。データの破損にはもってこいの方法

あなたはすでにPostgreSQLをインストールしていて、実行中のサーバを停止することなくデータディレクトリを削除しました。そのため、削除されたデータファイルを管理している孤児のPostgreSQLサーバプロセスが存在し、ファイルシステムにアクセスできなくなり、最後に開いていたファイルハンドルが閉じられると完全に削除されてしまいます。クラスタのデータディレクトリを削除してしまったので、pg_ctlを使って通常のようにサーバをシャットダウンすることはできませんので、単純にプロセスを kill する必要があります。postmaster を殺せば (kill -9 は使わず、通常の kill で十分です)、他のプロセスもシャットダウンされます

これで、initdb‘d のデータに対して新しいサーバを datadir で起動することができます

他の古いバージョンのPostgreSQLをアンインストールしない限り、軌道上での競合が発生する可能性が高いです

一言で言えば

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

1行目の番号をメモしてください

pidがpostgresのpostmasterのものであることをpsで確認してください

以下のコマンドで、’PID’ をメモしておいた番号に置き換えて、postmaster プロセスを終了させてください。ここでも、kill -9kill -KILLは使わず、ただ単にkill、つまりSIGTERMを使ってください

kill PID

pidがpostgres postmasterのものではない場合、まだ実行中のkillバックエンドを手動でkillし、それらが実行されていないことを確認してからpostmaster.pidを削除してください。(また、postmaster.pidが他のVM/ホスト上でサーバが動作している可能性のある共有ストレージ上にないことを確認しなければなりません)

124  Craig Ringer  2013-02-17


もう一つの可能性としては、ハードシャットダウンをしていて、postgresのプロセスがpidファイルをクリーンアップしないまま死んでしまったということが考えられます。これは、私のラップトップのバッテリーが切れたときに起こります

このソリューションは本番システム用ではないので、postgresデーモンが実行されていないことを本当に確認する必要がありますが、私はコーディングのためにラップトップを使用しているので、データベースを再生成する必要があることを心配していません

そのポートで別のプロセスが実行されていたり、全く実行されていなかったりした場合は、pid ファイルを削除すればよいのです

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

と、postgresがすぐに正常に起動するようになります

そのポートで別のプロセスが実行されているかどうかを調べるには、以下のようにします

ps wax | grep `head -1 /usr/local/var/postgres/postmaster.pid`

Then run

tail -f /usr/local/var/postgres/server.log

を見てみてください見た方がいいですよ

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 933) running in data directory "/usr/local/var/postgres"?
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 933) running in data directory "/usr/local/var/postgres"?
LOG:  database system was interrupted; last known up at 2014-05-25 09:41:32 PDT
LOG:  database system was not properly shut down; automatic recovery in progress

(というか、少なくとも上記のことをした後に見ただけでは 🙂

(そして本当に、PostgresはPID 933を持つプロセスが存在しないことに気付き、自分で偽のPIDファイルを削除するほど賢くなるべきではないのでしょうか?)

53  AlexChaffee  2014-05-28


Yosemiteにアップグレードした後、私のpostgresを壊してしまいました(homebrew経由でインストールしました)

そして、このブログ記事につまずきました。http://ruckus.tumblr.com/post/100355276496/yosemite-upgrade-breaks-homebrew-installed-postgres

最初に私は、アップグレード中に明らかに消去された(Appleに感謝!)不足しているディレクトリを作成する必要がありました

$ cd /usr/local/var/postgres

$ mkdir {pg_tblspc,pg_twophase,pg_stat_tmp}

そして、通常の自作の起動シーケンスを使ってpostgresを再起動します

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

私の問題を解決してくれたRuckus Notesに感謝します。うまくいけば、あなたのお役にも立てると思います

8  Billy G  2014-11-13


HARD REBOOT INSTRUCTIONS

ハードリブート後に同じ問題が発生しました。postmaster.pid ファイルの pid をチェックした後、プロセスが実行されていないことに気づきました。私は.pidファイルをハードに削除したくなかったので、代わりに.bash_profileで作成したpg-stopエイリアスを使用しました

pg_ctl -D /usr/local/var/postgres stop -s -m fast

For Reference

# psql
alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

pg-stopの後のログ出力

LOG:  database system was interrupted; last known up at 2016-04-25 10:51:08 PDT
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/274FA10
LOG:  redo is not required
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
LOG:  database system was shut down at 2016-04-25 13:11:04 PDT

brew

homebrewでpostgresをインストールしている場合は、brew servicesを見てみてください。これが私のデータベースの起動/停止方法です

XXXXX:~ chris$ brew services list
Name       Status  User  Plist
mongodb    stopped
postgresql started chris /Users/chris/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
redis      started chris /Users/chris/Library/LaunchAgents/homebrew.mxcl.redis.plist

4  Chris Miller  2016-04-25


私のコンピュータがクラッシュした後にこのエラーが出ました。PostgreSQLはこのエラーのために起動することすらできませんでしたので、プロセスを停止させても解決にはなりませんでした。単純にバックアップを取ってからpostmaster.pidファイルを削除すると、エラーが止まってPGが再び起動できるようになりました

1  Jeff  2015-05-17


postmaster.pid を削除することは、起動するたびに盲目的に行うのが実際にはまともなことです。私のシステムではそうしています。起動したばかりなので、Postgresプロセスが実行されていないことがわかりますし、もしあなたがクリーンでないシャットダウンから回復しているのであれば、このファイルがあなたの回復を妨げることになります

Postgresのためのより良い設計は、postmaster.pidファイルを/runファイルシステムに置くことで、再起動のたびに削除されることが保証されています。他の多くのサーバはこの方法で動作しています

1  giraffedata  2017-08-29


時々、謙虚なpg_ctl -w restartがトリックを行うことができます 🙂

1  sekmo  2017-11-11


タイトルとURLをコピーしました