最近将我的机器从 Mac OS X Lion (10.7.4) 更新到 Mountain Lion (10.8),我认为它破坏了我的 PostgreSQL 安装。它最初是通过 Homebrew 安装的。我不是 DBA,但希望有人能告诉我如何解决这个问题。
我无法连接(但在山狮之前能够连接):
$ 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"?
但 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
它正在响应来自本地 Rails 应用程序的查询(测试数据库和开发数据库)
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
好像没有/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
我该如何解决这个问题?
我发现我有一个非常相似的问题,即 postgres 正在打开一个套接字
/var/pgsql_socket_alt
,我的软件都不希望在其中看到,但我的问题的解决方案不仅仅是我的$PATH
.我必须创建目录
/var/pgsql_socket
,自己整理,然后设置(位于unix_socket_directory
)该目录,然后使用二进制文件成功启动正确的 postgres 服务器(这是进来的地方——确保解析为,或者总是明确地调用它)。postgresql.conf
/usr/local/var/postgres
pg_ctl
/usr/local/bin
$PATH
which pg_ctl
/usr/local/bin/pg_ctl
/var/pgsql_socket_alt
这可能会帮助通过提及找到此问题的其他用户。一个合理且典型的解释是
psql
,homebrew 附带的与/usr/local/bin/psql
$PATH 中的不同,例如/usr/bin/psql
(与 OS X 捆绑)。您可能想尝试使用完整路径:$ /usr/local/bin/psql -U rails -d myapp_development
此外,您的问题的输出中有一些相当不寻常的东西
ps
:postgres 服务器在meltemi
Unix 用户下运行,而通常使用专用的postgres
Unix 用户。尝试:
或者
我不知道 psql 客户端的任何配置文件。但是 psql 确实尊重许多与命令行选项相关的环境变量。
因此,要让 psql 自动使用您选择的套接字,您可以将 PGHOST 变量设置为包含套接字的目录。IE
晚了,但我发现这很有帮助: http ://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
那是给 Lion 的,但在从 10.6.8 升级到 Mountain Lion 并在 10.6.8 之前通过 HomeBrew 安装 PostgreSQL 后,我遇到了与该线程中的问题相同的问题。升级后我也有神秘的
/var/pgsql_socket_alt
文件夹,但我只是将其删除并/var/pgsql_socket
按照@wolftron 的建议创建。然而,这并不是最终的解决方案。如果我在
unix_socket_directory
中留空/注释掉postgresql.conf
,则升级之前存在的任何项目都会抱怨套接字 in/var/pgsql_socket
丢失。但是如果我更改了 conf 和 hard-codedvar/pgsql_socket
,任何新项目都会抱怨 socket in/tmp
丢失了。非常令人沮丧...直到我重新安装pg gem
在 10.8 之前的项目中(gem uninstall pg && gem install pg
)并在文件unix_socket_directory
中注释掉。conf
快速pg_ctl
重新启动服务器后,新旧项目都可以正常工作。我的 pgsql 套接字/tmp
现在就在里面,fwiw。旁注:如果您正在使用
activerecord-postgresql-adapter
gem,请先将其卸载,然后重新安装 pg,然后activerecord-postgresql-adapter
再次安装。我刚刚注册了 dba SE,所以似乎无法对相关帖子发表评论(真是个垃圾!)。
但是,我确信我和@thure 是在同一条船上。我确保 /usr/local/bin 在我的 PATH 中比 /usr/bin 更早,检查了 shell 用
which
and散列了哪些二进制文件type
,等等。我看到了与@thure 相同的症状。然后我顿悟了;我意识到我已经
pg
在一个 shell 中重建了 gem(我正在使用 Ruby),它的 PATH 受到 Mac 的 path_helper 的不利影响(它从 /etc/profile 运行并将 /usr/bin 放在 /usr/local/bin 之前) .我卸载了 pg 并将其重新安装在 PATH 正确的 shell 中。突然间我可以连接了!
因此,请确保您重新编译您的语言绑定人员,并让他们找到(大概)的正确副本
pg_config
。我无法快速找到找到此块的链接,但它对我有用。
导出 PGHOST=localhost
哦,这是链接。 https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
我找到了这个答案: https ://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql 而且,尽管它很简单,但它对我有用......运行了一个
$bundle update
和它又开始工作了。我发现将实际位置符号链接到预期位置效果很好:
与@thure 接受的答案一致,但更简单。
在这里,2016 年,El Capitan 出现了,Apple 不断改变。Postgres 作为操作系统的一部分安装,postgres 配置文件将 postgresql.conf 中的 unix_socket_directories 属性设置为 /tmp。套接字位于 /tmp/.s.PGSQL.5432 中。我能够通过执行以下操作来解决这个问题:
希望这可以帮助某人。