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


32

最近将我的计算机从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上面提到的套接字文件了!也许安装Mountain Lion可以消除这种情况?

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

我该如何解决?


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

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

有没有提到在日志文件中创建套接字文件/usr/local/var/postgres/server.log
菲尔(Philᵀᴹ)

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

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

Answers:


30

我发现我有一个非常相似的问题,即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年

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

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

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

8

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

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

另外,ps您的问题输出中有一些非常不寻常的事:postgres服务器在meltemiUnix用户下运行,而通常使用专用的postgresUnix用户。


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

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

4

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

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

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

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

3

尝试:

psql -U rails -d myapp_development -h localhost

要么

psql -U rails -d myapp_development -h 127.0.0.1

3

迟了,但是我发现这很有帮助: 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升级之前存在的所有项目都会抱怨/var/pgsql_socket缺少套接字。但是,如果我更改了conf并进行了硬编码var/pgsql_socket,则任何新项目都会抱怨/tmp缺少该套接字。非常令人沮丧...直到我重新安装pg gem到10.8之前的项目(gem uninstall pg && gem install pg)中并unix_socket_directoryconf文件中留下注释。快速pg_ctl重启服务器后,新项目和旧项目都可以工作。我的pgsql套接字/tmp现在存在,fwiw。

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


2

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

但是,我确信自己和@thure在同一条船上。我确保/ usr / local / bin在我的PATH中早于/ usr / bin,并检查了shell用which和哈希的二进制文件type,等等。

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

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

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




1

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

sudo ln -s /tmp /var/pgsql_socket

希望这对某人有帮助。


1

寻找正确的套接字文件

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

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

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

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

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


1

默认情况下,postgres似乎试图通过unix-domain-sockets连接。 UNIX域套接字

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

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

psql -U username -p port -h host

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


0

你好,世界:)
对我而言,最好的但奇怪的方法是做下一件事情。

1)下载postgres93.app或其他版本。将此应用添加到/ Applications /文件夹中。

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

导出PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
这是psql从的路径Postgres93.app。该行(命令)在每次启动控制台时运行。

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

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

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

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



0

我在尝试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命令设置默认值的配置文件。有人可以对此发表评论吗?

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.