注意
これは研究室のサーバ上のVMでPostgreSQLの設定をしているときにエンカウントしたエラーについてのメモです. 見づらいのはご容赦ください.
前提
- Ubuntu18.04のサーバの
yuki
というVMにorbit
というNASをマウントしている. -
orbit/postgresql
にPostgreSQLのデータファイルの実体を保存する設定済み. -
orbit
の所有者がrootになっており,毎回一般ユーザ(moririn)からsudo権限を発行して実行するのがめんどくさいため,所有者設定を変えたい.
問題発生時の行動
所有者を変更するにはchownコマンドを使えばいいはずだと思った自分は以下のコマンドを入力した.
moririn@yuki:$ chown -hR moririn /orbit
# -h: 指定したファイルがシンボリックリンクの場合、シンボリックリンクのみ所有権を変更
# -R: 再帰的に所有者を変更
しかし,postgresqlを再起動してアクセスしようとすると下記のエラーが出現
psql:could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
LAN内の他のサーバからアクセスしようとしても同様のエラーが出現していました...このとき,configファイルのpg_hba.conf
を確認しましたが正しい内容が書いてありました.
解決策
とりあえず...statusを確認すると以下のように出力されました
moririn@yuki:$ systemctl status postgresql@12-main.service
● postgresql@12-main.service - PostgreSQL Cluster 12-main
Loaded: loaded (/lib/systemd/system/postgresql@.service; indirect; vendor preset: enabled)
Active: failed (Result: protocol) since Mon 2019-12-02 06:37:46 UTC; 1min 12s ago
Process: 4153 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 12-main start (code=exited, status=1/FAILUR
Dec 02 06:37:46 yuki systemd[1]: Starting PostgreSQL Cluster 12-main...
Dec 02 06:37:46 yuki postgresql@12-main[4153]: Error: Config owner (postgres:115) and data owner (moririn:1000) do not
Dec 02 06:37:46 yuki systemd[1]: postgresql@12-main.service: Can't open PID file /run/postgresql/12-main.pid (yet?) af
Dec 02 06:37:46 yuki systemd[1]: postgresql@12-main.service: Failed with result 'protocol'.
Dec 02 06:37:46 yuki systemd[1]: Failed to start PostgreSQL Cluster 12-main.
これによるとそもそもサーバが立ち上がっていない...ということがわかります.原因はconfigの所有者(postgres)とdataの所有者(moririn)が異なるためとわかりました.
下記のコマンドより, dataディレクトリの所有者をpostgresに戻したところこのエラーは出力されず,PostgreSQLサーバも立ち上がるようになりました.
moririn@yuki:$ chown -hR postgres /orbit/postgresql
感想
今回はデータディレクトリ/orbit/postgresql
の所有者を変更する形で対処を行いましたが, configファイルの所有者変更でも対処できたように思います. 多くの方がconfigファイルを/var/lib/postgresql
内に置いているようで, Web上の多くの記事はこの所有者を変更すれば良いと記載していたのですが, 自分の場合はconfigファイルを/etc/postgresql
内に置いていたので余計手こずったように思いました.このようにconfファイルを探したいときは下記のようにコマンドを実行することですべてのディレクトリを探索し, ファイルを探すことができることを学びました.
moririn@yuki:$ sudo find / -name pg_hba.conf