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".
だから、私はpostgresフォルダをrm -rf
してまた実行しました。
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"?
今私が自分の活動モニターを見ると、私はpostgressの6つの例を見ることができます。
これをどのように修正しますか?
公共サービスのお知らせ:postmaster.pid
を削除しないでください。本当に。データ破損を防ぐための素晴らしい方法です。
あなたはすでにPostgreSQLをインストールしており、実行中のサーバを停止することなくデータディレクトリを削除しました。これで、削除されたデータファイルを管理している孤立したPostgreSQLサーバプロセスがいくつかあるので、それらはファイルシステムからアクセスできなくなり、最後に開いたファイルハンドルが閉じられると完全に削除されます。クラスタデータディレクトリを削除したので、通常のようにpg_ctl
を使用してサーバーをシャットダウンすることはできません。したがって、単にプロセスを強制終了する必要があります。 postmasterを終了し(do not kill -9
を使用します。通常のkillを実行するだけで)、残りも終了します。
そうすると、datadir内で新たなinitdb
データに対する新しいサーバーを起動することができます。
あなたがPostgreSQLの他の古いバージョンをアンインストールしない限り、あなたはトラックをめぐる衝突を経験する可能性が非常に高いです。
一言で言えば:
cat /usr/local/var/postgres/postmaster.pid
最初の行の番号を書き留めます。これは、ポストマスターのpidです。
Pidがpostgres postmasterのものであることをps
で確認してください。
次のコマンドでpostmasterプロセスを終了させ、 'PID'を書き留めた番号に置き換えます。繰り返しになりますが、kill -9
やkill -KILL
は使用せず、単にkill
、つまりSIGTERM
を使用してください。
kill PID
Pidがpostgres postmasterのものではない場合、手動でkill
まだ実行されている可能性のあるpostgres
バックエンド、 verify それらが実行されていないこと、および のみ postmaster.pid
(postmaster.pid
が、サーバーが他のVM /ホストで実行されている可能性がある共有ストレージにないことも確認する必要があります)。
もう一つの可能性はあなたがハードシャットダウンをしていてpostgresプロセスがそのpidファイルをクリーンアップせずに死んだことです。これは私のラップトップのバッテリーがなくなったときに起こります。
この解決法は本番システムではではなく、実際にpostgresデーモンが実行されていないことを確かめるべきですしかし、私はラップトップをコーディングに使用しており、データベースを再生成する必要があることを心配していません。
そのポートで他のプロセスが実行されている場合、またはまったく実行されていない場合は、pidファイルを削除します。
rm /usr/local/var/postgres/postmaster.pid
そしてpostgresはすぐにうまく起動するでしょう。
そのポートで別のプロセスが実行されているかどうかを調べるには、次のようにします。
ps wax | grep `head -1 /usr/local/var/postgres/postmaster.pid`
それから走りなさい
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ファイルを自分自身で削除するほど賢くてはいけませんか?)
Yosemiteにアップグレードしてpostgresを壊した後(自作経由でインストールされた)、これらすべてを利用できないようにしました。
それから私はこのブログ記事につまずいた: 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。うまくいけば、それもあなたに役立ちます。
私はハードリブート後にこれと同じ問題を抱えていました。 postmaster.pid
ファイルのPIDを確認したところ、プロセスが実行されていないことに気付きました。 .pidファイルを完全に削除したくはなく、代わりにpg-stop
で作成した.bash_profile
エイリアスを使用しました。このエイリアスはただ実行されます
pg_ctl -D /usr/local/var/postgres stop -s -m fast
# 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
私がここで言及しておくべきだと思いますが、もしあなたが自作で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
時々謙虚なpg_ctl -w restart
がトリックをやることができる:-)
私は私のコンピュータがクラッシュした後、私はこのエラーを受けた。 PostgreSQLはこのエラーのために起動することすらできませんでしたので、プロセスを終了させることは解決策ではありませんでした。単純にバックアップしてからpostmaster.pid
ファイルを削除すると、エラーが停止し、PGは再開できました。
盲目的に、postmaster.pidを削除するのは、実際には毎回の起動時にやるべきことです。それが私のシステムがすることです。起動したばかりなので、Postgresプロセスが実行されていないことがわかります。また、不正なシャットダウンから回復している場合は、このファイルが存在して回復を妨げることになります。
Postgresのより良い設計はpostmaster.pidファイルを/ runファイルシステムに置くことでしょう。そのため、再起動のたびに削除されることが保証されています。他の多くのサーバーはそのように動作します。