我使用 Fink 在 os x 上安装了 postgresql。当我尝试启动 psql 时,我得到:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
我之前从未安装过 postgresql,所以不太清楚该去哪里找。有什么建议吗?
答案1
这意味着 PostgreSQL 守护程序未运行。您需要找到守护程序的安装位置。默认情况下,它应该安装在 /usr/local/pgsql 中。如果在那里,请检查是否有 /usr/local/pgsql/data 目录。如果没有,请运行以下命令:
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
然后,如果成功,运行
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data 启动
这应该会让你走上正确的道路。
答案2
在我看来,你正试图在当前用户帐户下运行 PostgresSQL。我不知道 PostgreSQL 的 fink 属性,但相关守护进程应该在专用用户帐户下运行(比如说PostgreSQL 的例如)。
首先确定 PostgresSQL 存储其数据和配置文件的数据目录。您的错误消息似乎表明这可能是“/Library/PostgreSQL/8.4/data”。此目录应该已经属于PostgreSQL 的-user 并赋予他 rwx 权限。我猜 Fink 已经创建了它,所以请查看安装日志。
查看此目录(您可能需要 su/sudo,因为您可能没有足够的权限使用控制台用户执行此操作)。如果有一些文件,例如 postgresql.conf、一堆 pg_* 和一些其他文件,都属于PostgreSQL 的,数据目录似乎没问题,否则调用以下命令(替换二进制路径,PostgreSQL 的-user 和数据路径与您的系统值,有关更多选项请参阅 man initdb):
sudo -u postgres /usr/local/pgsql/bin/initdb -D /Library/PostgreSQL/8.4/data
它是重要的在这里以 postgres 用户身份执行 sudo,因为运行 postgres 守护进程的用户帐户必须具有足够的访问权限。
此外,您还必须使用 sudo 启动守护进程(这稍后应由 lauchctl-entry 或类似程序来处理),因此:
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /Library/PostgreSQL/8.4/data
您可以随时重新创建数据目录,但请务必进行备份并且不要在 postgres 仍在运行时覆盖它。
答案3
您可以使用以下命令检查 Postgresql 是否正在运行并监听:
lsof -i |grep LISTEN