数据目录"/usr/local/var/postgres"的所有权错误。
问题出现的原因是/usr/local/var/postgres目录的所有者错误。该目录的所有者应该是postgresuser,但实际上是root。
解决方法是将/usr/local/var/postgres目录的所有者更改为正确的用户。首先,使用以下命令检查该目录的所有者:
ls -l /usr/local/var/ | grep postgres
如果看到的结果是:-rw-r--r-- 1 postgresuser postgresuser 285659 Sep 1 18:05 postgres
那么假设正确的所有者是"postgresuser",然后使用以下命令以正确的用户身份运行数据库:
sudo -u postgresuser postgres -D /usr/local/var/postgres
如果执行第一行命令后得到的结果是:drwxr--r--+ 27 root admin 918 1 28 23:31 postgres
并且提示"root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user ID to prevent possible system security compromise.(不允许以"root"权限启动PostgreSQL服务器。为了防止可能的系统安全威胁,服务器必须在非特权用户ID下启动。)
则需要使用以下命令更改/usr/local/var/postgres目录的所有者,将YYY替换为您的用户名:
sudo chown -R YYY /usr/local/var/postgres
然后,您应该能够运行postgres -D /usr/local/var/postgres
。
接着,您可能会遇到FATAL: data directory "/usr/local/var/postgres" has group or world access DETAIL: Permissions should be u=rwx (0700)的错误提示。这表示目录的权限不正确。
要更改目录的权限为0700,使用以下命令:
sudo chmod -R 700 /usr/local/var/postgres
但是,您可能会遇到FATAL: lock file "postmaster.pid" already exists的错误提示。它提示postgresql可能已经在运行中。可以使用以下命令检查是否有其他进程正在使用该目录:
ps -e | grep 7671
如果返回结果是"7671 ?? 0:00.02 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log 7685 ttys000 0:00.00 grep 7671",这表示您的数据库正在运行中,您应该可以使用它。