pg_ctl: PID ファイル "/var/lib/postgres/data/postmaster.pid" を開けませんでした: 権限が拒否されました

pg_ctl: PID ファイル "/var/lib/postgres/data/postmaster.pid" を開けませんでした: 権限が拒否されました

Arch Linux では、initdb コマンドを実行すると、次のメッセージが表示されます。

Success. You can now start the database using:
    pg_ctl -D /var/lib/postgres/data -l logfile start

postgres ユーザーとして、上記のコマンドを使用して起動しようとすると、エラーが発生します。

FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock" no such file or directory

postgres ユーザーに切り替えて、上記のコマンドで起動しようとすると、次の結果が得られます。

pg_ctl: could not open PID file "/var/lib/postgres/data/postmaster.pid" : Permission denied

次に、上記のコマンドを sudo として実行してみます。

sudo pg_ctl -D /var/lib/postgres/data -l logfile start

そして次のようになります:

pg_ctl: cannot run as root.

答え1

パッケージ化された起動スクリプトを使用せずに postgres を手動で起動する場合は、スクリプトが実行する操作を実行する必要があります。

  1. /run/postgresql他のユーザーに対して書き込み権限postgres と読み取り権限を持つディレクトリを作成します。/run通常は RAM ディスクにマウントされるため、空であるのが普通です。

  2. pg_ctlユーザーとして排他的に実行します postgres。そのためには を使用する必要があるsudo -u postgres場合に使用します。sudo

あなたが言及した最初のエラーは #1 で解決され、他の 2 つは #2 で解決されます。または、OS のパッケージに付属する起動スクリプトを使用するだけで、これらの詳細を処理するために存在するため、学習する必要はありません。

のドキュメントhttps://wiki.archlinux.org/index.php/PostgreSQL伝える:

ついに、始めるそして有効にするpostgresql.service。

これは、systemctl enable postgresql.serviceそしてsystemctl start postgresql.service対照的にpg_ctl [...options...] start

答え2

参考までに付け加えておきますが、ちょうど今、Ubuntu 上の Postgresql 10 で、これと非常に関連した問題が発生しました。実際、could not open PID file “/var/lib/postgres/data/postmaster.pid”それが私をここに導いたのです。ここで学んだことや、他の場所で学んだことをすべて試しましたが、すべて無駄でした。そこで、昔ながらの再起動に頼りました。そして、すべてうまくいきました。まあ、いいでしょう。再起動を試してみなさいということ以外、あまり学んだり、教えられたりしたとは言えません...

関連情報