PostgreSQL Mountain Lion的套接字问题

21

我一直在尝试在我的系统(OSX 10.8,干净安装)上安装PostgreSQL,但是在使用psqlcreatedb等方面遇到了问题。我尝试了各种解决方案,但没有一个能够解决问题。

安装成功后,我继续通过以下方式解决已知的套接字问题:

mkdir /var/pgsql_socket 
sudo chown $USER /var/pgsql_socket

然后我编辑了postgresql.conf文件,将unix_socket_directory设置为

unix_socket_directory = '/var/pgsql_socket'

并重新启动了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"?

另外,我已经检查了服务器的状态,看起来它正在运行,但是我仍然收到“没有这样的文件或目录”的错误提示。

有什么想法吗?


Pg是否可能在不同的端口上监听?请检查postgresql.conf文件中的port指令。另外,您是如何安装Pg的?使用Heroku的Postgres.app?Homebrew?EnterpriseDB安装程序?还是其他方式? - Craig Ringer
使用了Homebrew,但也安装了然后卸载了Postgres.app....问题自从最初的Homebrew安装以来就一直存在。 - irvanjitsingh
4个回答

11

根据错误信息,出现在$PATH中第一个的psql命令将/tmp硬编码为默认的Unix套接字目录。

由于实际目录实际上是/var/pgsql_socket,因此您应明确指定它,而不是依赖于默认设置:

$ psql -h /var/pgsql_socket [other options]
同样适用于其他客户端命令,如createdbdropdbcreateuser等。
如果不想每次都指定-h,可以将其放入PGHOST环境变量中。
有些人也通过使用TCP连接到localhost来解决此问题,而不是使用Unix套接字目录。
此问题的根本原因在于,在Mac OS X上安装PostgreSQL后,系统最终会拥有两个不同的postgres客户端集(libpq库、psql和其他相关实用程序),一个与MacOS捆绑在一起,另一个来自PostgreSQL安装程序。
因此,另一种方法是更改您的$PATH,以便在系统安装的psql之前选择使用安装在PostgreSQL中的那个(大概位于/usr/bin/psql)。

1
我曾经遇到过完全相同的问题,而我只使用了Postgres.app。问题(正如丹尼尔所指出的)是Mountain Lion有一个默认安装,并且确实存在两个不同的postgres客户端实例。我通过将以下内容放置在我的.bash_profile中来为Postgres应用程序的版本创建别名:alias psql=/Applications/Postgres.app/Contents/MacOS/bin/psql,这就解决了问题。 - jbnunn
1
将 PGHOST 设置为本地主机解决了我的问题。即使我已经在postgresql.conf中设置了套接字文件夹,但 psql 仍然尝试连接到 /tmp。谢谢! - Jared

1
当我通过Homebrew安装PostgreSQL 9.2时,遇到了同样的问题。该版本自带的psql在没有任何选项的情况下调用时会查找/tmp中的socket。
我不想添加任何新的环境变量,如PGHOST或为psql创建别名。这些做法都没有问题,但我只是不想让我的环境变得更加混乱。
那么,为什么不在postgresql.conf中设置unix_socket_directory/tmp呢?我就这样做了:
unix_socket_directory = '/tmp'      # (change requires restart)
#unix_socket_group = ''             # (change requires restart)
#unix_socket_permissions = 0777     # begin with 0 to use octal notation

重新加载后,我可以直接运行$ psql,而无需添加别名或环境变量。


我喜欢这个解决方案的想法,但它似乎对我不起作用。 - Ryan

0

我也遇到了同样的问题,按照你所做的去操作后,我还需要更改我的路径,使得 /usr/local/bin(Homebrew 放置所有文件的位置)在 /usr/bin 之前。我不知道为什么这不再是默认设置,但很容易更改。

sudo vi /etc/paths

然后编辑文件,在顶部添加 /usr/local/bin 行。

或者,如果您只想让此更改针对您的特定用户帐户生效,请编辑您的 ~/.bash_profile 文件:

touch ~/.bash_profile
vi ~/.bash_profile

并添加以下行:export PATH="/usr/local/bin:$PATH"

然后运行source ~/.bash_profile使更改生效。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接