当PostgreSQL服务器无法启动时
请注意
這是關於在實驗室伺服器上的虛擬機器進行 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中的其他服务器访问,同样出现了错误…这时,我检查了配置文件pg_hba.conf,发现其中有正确的内容。
解决方案 (jiě jué cè)
暂时先确认一下状态,输出如下。
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的所有者来处理问题,但我觉得更改配置文件的所有者也可以解决。许多人将配置文件放在/var/lib/postgresql内,很多网络文章都说只需要更改该所有者就可以了,但是我的配置文件是放在/etc/postgresql内,所以我感觉自己很麻烦。现在我学到了当我想要找到conf文件时,可以通过执行以下命令来遍历所有目录,以便找到文件。
moririn@yuki:$ sudo find / -name pg_hba.conf