当我今天下午尝试启动我的本地Postgres服务器时,我收到了以下错误消息:
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"?
我尝试按照以下问题对最高评分的答案中的说明进行操作:psql: could not connect to server: No such file or directory (Mac OS X);但是,文件/usr/local/var/postgres/postmaster.pid
似乎不存在。
我在OS X Mavericks上运行。
我不完全确定这是否有助于缩小范围,但我昨晚做的最后一件事是尝试一个名为Yasu(http://yasuapp.net/)的OS X系统实用程序。我只能假设当它重新启动系统时,就会出现问题。
答案 0 :(得分:0)
使用( netstat -ln; ps -ef ) | egrep '(postgres)|(postmaster)|(5432)'
之类的命令来尝试确定postgres服务器的实例是否正在运行。
如果postmaster未运行,请删除 postmaster.pid 文件并重新启动数据库。不要在确保数据库没有运行的情况下删除 postmaster.pid 文件,并注意在不启动数据库的情况下删除 postmaster.pid 文件毫无意义。
打开 postgresql.conf 文件并查看 listen_addresses , port , unix_socket_directory , unix_socket_group 和 unix_socket_permissions 设置可能是问题的根源。
由于引用的错误消息特别提到了套接字文件,因此请仔细查看 unix_socket_directory , unix_socket_group 和 unix_socket_permissions 。
如果 unix_socket_directory 指向 / tmp 以外的其他位置,则存在各种变通方法。
或者,假设服务器正在运行,可能会尝试查找套接字文件而不查看 postgresql.conf 文件,但这可能会使得更难以解决权限,端口等问题。像locate
,find
等工具可以与sudo
或 root 用户一起使用。
$ sudo find /tmp /var -name .s.PGSQL.5432
假设 .s.PGSQL.5432 文件问题的位置是问题的根本原因,在psql
命令行上指定套接字文件位置可能是最简单的解决方法。例如,如果* .s.PGSQL.5432文件位于某些系统上的 / var / pgsql_socket 目录中,请尝试此操作,但当然要使用实际目录 .s.PGSQL.5432 位于:
$ pgsql -h /var/pgsql_socket
如果 .s.PGSQL.5432 文件位于 / tmp 中,那么问题更可能是权限之一,并咨询 postgresql.conf建议使用文件,并且可能必须将尝试psql
命令的用户添加到有权访问套接字文件的组中。 (请记住,在更改群组成员资格后退出并重新登录。)