PostgreSQL Mountain Lion套接字问题

irv*_*ngh 21 postgresql macos osx-mountain-lion

我一直在试图建立的PostgreSQL我的系统上(OSX 10.8,干净的安装),但我遇到了麻烦,使用psql,createdb等等.我已经尝试了各种解决方案,并没有似乎工作.

安装成功,我继续使用以下方法修复已知的套接字问题:

mkdir /var/pgsql_socket 
sudo chown $USER /var/pgsql_socket
Run Code Online (Sandbox Code Playgroud)

然后我编辑postgresql.conf,设置unix_socket_directory为

unix_socket_directory = '/var/pgsql_socket'
Run Code Online (Sandbox Code Playgroud)

并重新启动Pg.

这应该显然已经解决了套接字问题,但我仍然得到:

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"?
Run Code Online (Sandbox Code Playgroud)

此外,我已经检查了服务器的状态,它似乎正在运行,但我仍然得到'没有这样的文件或目录'

有任何想法吗?

Dan*_*ité 11

根据该错误信息时,psql首先出现在命令中$PATH具有/tmp作为硬编码的默认Unix套接字目录.

实际上/var/pgsql_socket,由于实际目录,您应该明确告诉它而不是依赖于默认目录:

$ psql -h /var/pgsql_socket [other options]
Run Code Online (Sandbox Code Playgroud)

这同样适用于像其他客户端的命令createdb,dropdb,createuser...

如果您不想-h每次指定,可以将其放入PGHOST环境变量中.

有些人也通过使用TCP连接来解决这个问题,localhost而不是使用Unix套接字目录.

这个问题的根本原因是在Mac OS X上安装PostgreSQL后,系统最终会有两个不同的postgres客户端实例(libpq库psql和其他相关实用程序),一个与MacOS捆绑在一起,另一个与MacOS捆绑在一起.随PostgreSQL安装程序一起提供.

因此,另一种方法是更改​​您的,$PATH以便在psql安装了系统之前选择安装PostgreSQL(可能/usr/bin/psql).