关于postgresql:Mountain Lion Postgres无法连接

Mountain Lion Postgres could not connect

我更新到山狮后,我的postgres doest工作。 它仍在运行,但我的应用程序无法再连接到它。

1
2
3
4
5
6
7
8
$ ps aux | grep postgres
postgres         204   0.0  0.0  2446960    836   ??  Ss    7:31AM   0:00.59 postgres: stats collector process    
postgres         203   0.0  0.1  2478732   2240   ??  Ss    7:31AM   0:00.41 postgres: autovacuum launcher process    
postgres         202   0.0  0.0  2478600    584   ??  Ss    7:31AM   0:00.34 postgres: wal writer process    
postgres         201   0.0  0.0  2478600    784   ??  Ss    7:31AM   0:00.48 postgres: writer process    
postgres          95   0.0  0.0  2446960    368   ??  Ss    7:31AM   0:00.11 postgres: logger process    
postgres          64   0.0  0.2  2478600   7972   ??  Ss    7:31AM   0:00.26 /Library/PostgreSQL/9.1/bin/postmaster -D/Library/PostgreSQL/9.1/DATA
anezio         10205   0.0  0.0  2432768    624 s000  R+    8:01AM   0:00.00 grep postgres

我的应用程序返回此错误:

1
2
3
could NOT CONNECT TO server: No such file OR directory
IS the server running locally AND accepting
connections ON Unix DOMAIN socket"/var/pgsql_socket/.s.PGSQL.5432"?

我仍然可以使用命令/Library/PostgreSQL/9.1/bin/psql -U postgres连接到psql

似乎有些东西没有指向正确的地方


我刚遇到同样的问题。我个人刚从Postgres安装程序重新安装(在我的情况下是postgresql-9.1.3-1-osx.dmg),重新启动我的mac,一切都很好。附:重新安装没有消除我的数据库:)


检查您正在使用的psql。我在使用Heroku的Postgres.app服务器时遇到了同样的问题,发现我使用Apple的/usr/bin/psql客户端基于我的$PATH设置。将$PATH设置为使用Postgres库或使用已安装psql的完整路径。


默认的Unix域套接字路径在libpq中是硬编码的。
可能发生的情况是,在升级之前,您的应用程序使用Postgres一键安装程序安装的libpq库,而在升级之后,将获取此库的不同版本。

要解决这个问题,从程序员的角度来看,您可以指定套接字目录,而不是依赖于默认值。
要找到正确的目录(如果您还不知道它),请以超级用户身份(通常是postgres)连接到任何数据库并在SQL中发出:

1
SHOW unix_socket_directory;

然后使用在connect调用的host字段中获得的路径更改或重新配置应用程序(例如,在连接字符串中:host=/path/to/socket dbname=d user=u)。 Libpq会将它识别为unix套接字目录,因为它以斜杠开头,而不是主机名或IP地址。


不知何故,我完全忘记了这个套接字文件因为点而被隐藏。如果要检查套接字是否确实存在,请确保使用ls -A /tmp/.s.PGSQL.5432

在我执行以下操作后,我的postgres应用程序再次从psql接受连接。我认为这与第3步有关。

  • 退出postgres应用程序。
  • 在终端类型postgres -D ~/Library/Application\ Support/Postgres/var中。如果您使用的是postgres应用程序,那么这是数据目录。如果你没有使用postgres应用程序,你需要找出数据目录的真正含义。
  • 我从OS X得到一个提示,询问我是否要允许传入流量。我点击了是的。
  • 在不同的终端选项卡中键入psql。你应该成功连接。
  • 键入\q以退出psql。
  • 返回运行postgres的选项卡,键入ctrl c以停止postgres。
  • 启动postgres应用程序。 psql应该工作。

  • 问题是山狮带有它自己的psql客户端(/ usr / bin / psql),它显然试图通过在与安装程序不同的位置搜索本地套接字文件来连接postgres。您可以更改PATH变量以首先包含postgres bin文件夹,或者将默认的/ usr / bin / psql替换为安装中的文件。


    我通过卸载并重新安装它解决了这个问题