最近将我的计算机从Mac OS X Lion(10.7.4)更新为Mountain Lion(10.8),我认为这使我的PostgreSQL安装感到厌烦。它最初是通过Homebrew安装的。我不是DBA,但希望有人可以告诉我如何解决此问题。

我无法连接(但是在Lion Mountain之前可以连接):

$ 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


它正在响应查询(对测试db和开发db)来自本地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套接字文件了!

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt


如何解决此问题?

评论

不是postgres管理员,但是缺少套接字文件听起来是正确的。创建/ var / pgsql_socket目录(您的用户具有写权限)并重新启动服务器。看看是否可以解决

关于SO的相关问题。看来苹果在升级方面做得不好。

在日志文件/usr/local/var/postgres/server.log中有没有提到要创建套接字文件?

@ErwinBrandstetter您如何期望苹果在升级手动安装的第三方* nix应用程序方面做得“出色”?

@ Phil-不提。我开始认为这可能是路径变量问题。我认为我的$ PATH在升级/ usr / bin之前已更改,在/ usr / local / bin之前,并且我认为Mountain Lion可能预装了PostgreSQL!?!正在调查...

#1 楼

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

我必须创建目录/var/pgsql_socket,将其自己命名,然后将unix_socket_directory(位于postgresql.conf中)中的/usr/local/var/postgres设置到该目录,然后使用pg_ctl中的/usr/local/bin二进制文件成功启动正确的postgres服务器(这是$PATH进入的位置–确保which pg_ctl解析为/usr/local/bin/pg_ctl,或者始终始终明确地调用它。)这可能会帮助通过/var/pgsql_socket_alt提及找到此问题的其他用户。

评论


有趣。您也在山狮上吗?您是否在Homebrew上安装了PostgreSQL?如果是这样,想知道是否有人可以验证此解决方案,而不是像我那样更改$ PATH。

–梅尔蒂米(Meltemi)
2012年7月26日23:42

是的,是的,我希望如此!

–将 2012年7月27日,下午2:47

@wolftron,您的解决方案对我来说非常有用(Mountain Lion,homebrew / postgres,/ var / pgsql_socket_alt,整整九个)。这是《山狮》自编的新刊吗?如果您愿意的话,我会和他们一起开票。

–user10458
2012年7月27日在17:21

看来我们已经得到@Jamie的验证。

–将 2012年7月30日,3:24

我可以在OS X 10.8.2 / postgresql 9.2.1的brew安装上确认此问题和解决方案。

–哈特维格
13年2月13日在9:27

#2 楼

一个合理而典型的解释是,自制软件随附的psql位于/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用户用于此目的。

评论


另外,用户/组的_postgres(带下划线)对我来说是未知的。那是神器还是预期的东西?

–欧文·布兰德斯特(Erwin Brandstetter)
2012年7月26日在22:10

是的,正如您所说,这似乎是$ PATH问题。当我使用/ usr / local / bin / psql访问数据库时,事情像以前一样工作。 Lion没有系统PostgreSQL,或者我的$ PATH设置不同。自从我上次混淆这一点已经过去了一年,所以我记不清了。对于Unix用户...使用PostgreSQL的Homebrew安装,服务器通过启动启动,默认情况下,该用户设置为安装该服务器的本地用户。 Mac OS X Server上的设置有所不同,Mac OS X Server在postgres下自动启动PostgreSQL。

–梅尔蒂米(Meltemi)
2012年7月26日在22:10



#3 楼

我不知道psql客户端的任何配置文件。但是psql确实尊重许多与命令行选项相关的环境变量。

因此,要使psql自动使用您选择的套接字,可以将PGHOST变量设置为包含套接字的目录。即

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase


评论


我发现您可以将PGHOST设置为套接字文件所在的目录,但在任何地方都没有记录。但这确实有效。谢谢!

–安德鲁·舒尔曼(Andrew Schulman)
17年5月5日在20:53

#4 楼

试试:

psql -U rails -d myapp_development -h localhost




psql -U rails -d myapp_development -h 127.0.0.1


#5 楼

迟了,但我发现这很有用: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文件夹,但我只是将其删除并按照@wolftron的建议创建了/var/pgsql_socket。但是,这不是最终的解决方案。

如果我在unix_socket_directory中将postgresql.conf留空/注释为空,则升级之前存在的任何项目都会抱怨/var/pgsql_socket中的插槽丢失。但是,如果我更改了conf并对var/pgsql_socket进行了硬编码,则任何新项目都将抱怨/tmp中的套接字丢失。非常令人沮丧...直到我在10.8之前的项目(pg gem)中重新安装了gem uninstall pg && gem install pg并在unix_socket_directory文件中留下了conf注释。快速重新启动服务器后,新项目和旧项目都可以工作。我的pgsql套接字现在位于pg_ctl中。

侧注:如果您使用的是/tmp gem,请先将其卸载,然后重新安装pg,然后再次安装activerecord-postgresql-adapter

#6 楼

我只注册了dba SE,所以似乎无法在相关文章中发表评论(真是太棒了!)。

但是,我有信心和@thure一样的船。我确保/ usr / local / bin在我的PATH中早于/ usr / bin,并检查了shell用whichtype哈希了哪些二进制文件,等等。

我看到了相同的症状如@thure。然后我顿悟了。我意识到我要在一个外壳中重建pg gem(我正在使用Ruby),该外壳的PATH已受到Mac的path_helper(从/ etc / profile运行,并将/ usr / bin放在/ usr / local / bin之前)的不利影响)。

我卸载了pg并将其重新安装在PATH正确的shell中。突然之间,我可以连接!

,请确保您重新编译语言绑定人员,并让他们找到(大概是)pg_config的正确副本。

#7 楼

我无法在找到此块的地方快速找到链接,但是它对我有用。


哦,这是链接。 https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser

#8 楼

我找到了这个答案:
https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql
就这么简单,它确实有效对我来说...跑了一个$bundle update,它又开始工作了。

#9 楼

我发现将实际位置符号链接到预期位置效果很好:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket


@thure接受了答案,但更简单了。

#10 楼

在这里,2016年,El Capitan出现了,Apple不断改变现状。 Postgres作为操作系统的一部分安装,并且postgres配置文件将postgresql.conf中的unix_socket_directories属性设置为/ tmp。套接字在/tmp/.s.PGSQL.5432中。通过执行以下操作,我能够解决该问题:

sudo ln -s /tmp /var/pgsql_socket


希望对您有所帮助。

#11 楼

查找正确的套接字文件

find / -name .s.PGSQL.5432 -ls


从结果中获取文件的路径,并在psql命令中将路径与“ -h”参数一起使用

例如,这是我连接到macOS Server日历和联系人数据库的方式(在与服务器的ssh会话内):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav


然后,则该路径处的套接字文件将用于连接。

#12 楼

默认情况下,postgres似乎正在尝试通过unix-domain-sockets连接。 UNIX DOMAIN SOCKET

当我在docker上运行postgres实例时,这发生在我身上。您必须查看服务器接受什么样的连接。对我来说,这显然是TCP而不是unix域套接字。

添加标志以接受主机将连接重定向到正确的路径并解决了问题。

psql -U username -p port -h host

< PS:
Unix域套接字在内核级别工作,并且连接不必经历TCP连接所需的所有麻烦。当您希望通过不同的进程连接到自己的计算机作为进程间通信的一部分时,它们非常快速且高效。

#13 楼

你好,世界:)对我而言,最好的但奇怪的方法是做下一件事情。1)下载postgres93.app或其他版本。将此应用程序添加到/ Applications /文件夹中。

2)在文件.bash_profile(位于我的主目录中)中添加一行(命令):

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH

这是从psqlPostgres93.app的路径。该行(命令)在每次启动控制台时运行。

3)从Postgres93.app文件夹中启动/Applications/。它启动一个本地服务器(端口为“ 5432”,主机为“ localhost”)。

4)完成所有这些操作后,我很高兴运行$ createuser -SRDP user_name和其他命令,并看到它正常工作! Postgres93.app可以在每次系统启动时运行。

5)同样,如果您想以图形方式查看数据库,则应安装PG Commander.app。最好将Postgres DB视为漂亮的数据表。

当然,这仅对本地服务器有用。如果本说明能帮助遇到此问题的其他人,我将感到很高兴。

#14 楼

我在尝试在命令行上运行psql时遇到了同样的错误。原来,我的解决方案要简单得多。我在配置文件/etc/postgresql/9.4/main/postgres.conf中错误地配置了侦听端口。
我已将端口从端口= 5432更改为端口=5433。
当我将其更改回5432,即可按预期工作。

要测试是否已执行类似的操作,可以运行
$ psql -p5433
有很多有用的选项,例如您可以在此处找到psql命令:http://www.postgresql.org/docs/9.4/static/app-psql.html,以便可以测试OWN特定的错误配置。当然,您也可以简单地从* .conf文件中删除最后一组配置更改,以测试是否是问题的根源。我认为在您对文件权限和所有权进行处理之前肯定值得一试。
(请别忘了/etc/init.d/postgresql restart

我找不到的是设置的配置文件psql CLI命令的默认值。有人可以对此发表评论吗?

对我来说,我总是回到我的第一个编程原则:“我通常是任何给定错误的源头!”