PostgreSQL 在本地运行,但我无法连接。为什么?

Mel*_*emi 33 postgresql psql mac-os-x

最近将我的机器从 Mac OS X Lion (10.7.4) 更新到 Mountain Lion (10.8),我认为它破坏了我的 PostgreSQL 安装。它最初是通过 Homebrew 安装的。我不是 DBA,但希望有人能告诉我如何解决这个问题。

我无法连接(但在前 Mountain Lion 之前能够连接):

$ psql -U rails -d myapp_development
psql: 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"?
Run Code Online (Sandbox Code Playgroud)

但是 Postgres 显然还在运行:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log
Run Code Online (Sandbox Code Playgroud)

它响应来自本地 Rails 应用程序的查询(包括测试数据库和开发数据库)

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)
Run Code Online (Sandbox Code Playgroud)

好像没有/var/pgsql_socket/目录,更别提/var/pgsql_socket/.s.PGSQL.5432上面提到的socket文件了!?!也许安装山狮消除了这一点?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Wil*_*ill 30

我发现我有一个非常相似的问题,即 postgres 在/var/pgsql_socket_alt我的软件都不希望看到的地方打开一个套接字,但我的问题的解决方案不仅仅是我的$PATH.

我不得不创建目录/var/pgsql_socket,它执行chown自己,并设置unix_socket_directorypostgresql.conf(位于/usr/local/var/postgres)到该目录,然后使用pg_ctl二进制的/usr/local/bin成功启动正确的Postgres的服务器(这是$PATH进来-确保which pg_ctl做出决议/usr/local/bin/pg_ctl,或者只是始终明确调用它)。

这可能会帮助通过/var/pgsql_socket_alt提及找到此问题的其他用户。


Dan*_*ité 9

一个合理且典型的解释是,psql自制软件附带的那个与/usr/local/bin/psql您的 $PATH 中的那个不同,例如/usr/bin/psql(与 OS X 捆绑在一起)。您可能想尝试使用完整路径:

$ /usr/local/bin/psql -U rails -d myapp_development

此外,ps您的问题的输出中有一些相当不寻常的东西:postgres 服务器在meltemiUnix 用户下运行,而通常情况下,专用postgresUnix 用户用于此目的。