数据目录"/usr/local/var/postgres"的所有权错误。

11 浏览
0 Comments

数据目录"/usr/local/var/postgres"的所有权错误。

当我在终端中输入postgres -D /usr/local/var/postgres时,我得到了以下反馈:\n致命错误:数据目录“/usr/local/var/postgres”的所有权有误\n提示:服务器必须由拥有数据目录所有权的用户启动。\n我应该如何解决这个问题?\n谢谢~

0
0 Comments

问题出现的原因是/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",这表示您的数据库正在运行中,您应该可以使用它。

0