PostgreSQL 错误“无法连接到服务器: 没有这样的文件或目录”

像其他一些人一样,当我在我的项目中运行 rake db: shift 时,甚至在我的 Ruby on Rails3.2应用程序中尝试大多数数据库任务时,我都会得到这个错误。

PGError (无法连接到服务器: 没有这样的文件或目录 服务器在本地运行并在 Unix domain socket 上接受连接 “/tmp/. s.PGSQL. 5432”?

很久以前,我用 自酿的安装了 PostgreSQL,最近尝试安装了 MongoDB之后,我的 PostgreSQL 安装从来没有像现在这样。我正在运行 OS X v10.6雪豹。

什么是错误的,我如何更好地理解 PostgreSQL 是如何和应该安装在我的 Mac 上?

到目前为止(我认为)这告诉我 PostgreSQL 没有运行(?)。

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) ✗
501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

但这是否告诉我 PostgreSQL 正在运行?

✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136)
homebrew.mxcl.postgresql: Already loaded

我该怎么补救,我没看到什么?

附言: ~/Library/LaunchAgents包含两个 PostgreSQL. plist 文件。我不确定这是否相关。

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

我尝试了以下方法,得到了如下结果。

$psql-p 5432-h localhost

psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?

之所以会发生这种情况,是因为 OS X 在不同的地方安装了自己的 PostgreSQL 版本,而 Homebrew 在不同的地方安装了不同的版本,而 PostgreSQL 命令正在/tmp/目录中查找。您需要在 Stack Overflow 上进行更多的搜索,但是基本上您可以对 PostgreSQL 进行符号链接,以便在 tmp 路径中查找的任何内容实际上都能找到真正的路径(如果这样做有意义的话)。

在这个链接中,我找到了一些可以尝试的东西,特别是按照上面的 Mac OSX Lion Postgres 不接受/tmp/. s.PGSQL 上的连接来做符号链接。我仍然希望有人能够对在 OS X 上安装 PostgreSQL 背后的概念以及为什么这么困难做一个合理的解释。

帮助解决故障的最新见解:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql.

然后跑:

$ echo $PATH

要考虑的关键是:

确保要运行的 PostgreSQL 副本的路径条目在到达 OS X 系统的 PostgreSQL 之前 COMES。

这是决定运行哪个 PostgreSQL 的核心需求,据我所知,它会导致大多数这样的问题。

246975 次浏览

对于您提到的错误,这个方法对我很有效。请执行以下 操作:

  1. 可能更改 postgres.conf文件中指定的默认端口, 如果您在安装时使用了默认端口 5432以外的其他端口。

  2. 更改 postgresql.conf中的端口号并重新启动 DB 服务器。

  3. 不要输入 psql,而是输入完整的命令:

    psql -p 5432 -h localhost
    
    • 服务器名称和端口号

后遗症应用程序”是一个更好的解决方案,如果你在 OS X 上


解决办法是:

  1. 关闭数据库
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 重新启动 PostgreSQL (不是您的计算机)

详情请浏览 Postgreql 9.0.3. on Lion Dev Preview 1

如果您正在运行 Homebrew,卸载 Postgreql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

下载并运行以下脚本来修复/usr/local 的权限: * Https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

然后再次安装 Postgres 和 pg gem: *

$ brew install postgresql
$ initdb /usr/local/var/postgres -E utf8

让 launchd 在登录运行时启动 postgreql:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents

或者手动启动。

安装 pg gem

$ gem install pg

希望能帮上忙

原因

Lion 附带了一个已经安装的 postgres 版本,默认情况下使用这些二进制文件。一般来说,您可以通过使用自制 postgres 二进制文件的完整路径来解决这个问题,但是其他程序可能仍然存在问题。

解决方案

旋转 http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh

通过

Http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

当你跑步的时候: Psql-p 5432-h 本地主机 它不使用环回驱动程序,而是使用一个真正的套接字,因此您需要配置 postgres 来接受套接字连接。因此,即使 pgadmin 和其他客户机可以工作,psql 也不能。

您需要同时更改 postgreql.conf 文件和 pg _ hba。所以允许通过一个真正的套接字进行连接。这也将允许来自远程 ip 的连接,这就是为什么默认情况下禁用它的原因。

这些文件位于 data 目录中,但实际位置可能因 postgres 的安装方式不同而不同。在运行 postgres 时,运行以下命令:

ps -ef | grep postmaster

这两个文件是-D 目录(可能是/usr/local/pgsql/data)。

对于 postgreql.conf 文件,取消 listen _ address 的注释,并将其更改为:

listen_address = '*'

对于 pg _ hba. conf,添加以下行:

host all all 0.0.0.0/0 md5

出现此错误的一个原因是,重新启动计算机时本地 postgres 数据库关闭。在一个新的终端窗口中,简单地输入:

$psql -h localhost

重启服务器。

当我把 Postgres 升级到9.3. x 时,我就遇到了这个问题。对我来说,最快的解决办法就是降级到我之前的9.2. x 版本(不需要安装新的版本)。

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

自制安装特定版本的配方?”提供了一个更全面的解释,以及解决问题的替代方法。

Hello world:)
对我来说,最好但是最奇怪的方法就是做下一件事。 < br >
1) 下载 Postpres93.app或其他版本。

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

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
It's a PATH to psql from Postgres93.app. The row (command) runs every time console is started.

3) Launch Postgres93.app from /Applications/ folder. It starts a local server (port is "5432" and host is "localhost").

4) After all of this manipulations I was glad to run $ createuser -SRDP user_name and other commands and to see that it worked! Postgres93.app can be made to run every time your system starts.

5) Also if you wanna see your databases graphically you should install PG Commander.app. It's good way to see your postgres DB as pretty data-tables

Of, course, it's helpful only for local server. I will be glad if this instructions help others who has faced with this problem.

检查 postgres 目录中没有 postmaster. pid,可能是 /usr/local/var/postgres/

删除该文件并启动服务器。

Check-https://github.com/mperham/lunchy是 launchctl 的一个很好的包装器。

非常简单,只需在 datase.yaml 文件中添加 host。

对我来说,这很有用

rm /usr/local/var/postgres/postmaster.pid

删除该文件后,您可能还需要重新启动 Postgres,请执行下列操作之一:

brew services restart postgresql
# or
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

我使用 PostgreSQL 9.3得到了同样的错误,

无法连接到服务器: 连接被拒绝,服务器正在运行 并在主机“ localhost”(127.0.0.1)上接受 TCP/IP 连接 端口5432?

我用以下方法修复了这个问题:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf
service postgresql-9.3 restart

对我有用。

无论如何,当我在 pg_hba.conf文件(/etc/postgresql/9.5/main/pg_hba.conf)中输入错误(md4而不是 md5)时,我经历了同样的错误

如果你像我一样来到这里,再检查一次那个文件,确保里面没有什么可笑的东西。

在本地运行 PostgreSQL 可能会有不同的问题。我建议清理所有版本的 postgres 安装和重新开始。一旦您安装了它,如果您拥有具有最新 db/schema.rb的 Rails 项目,就很容易重新创建数据库

下面是我通常的 在 Mac 上安装 PostgreSQL。如果在本地根用户下运行数据库,可能需要省略创建 todo用户的最后一步

因此,对于这里的许多问题,似乎人们已经在运行 psql 并且必须删除 postmaster.pid。然而,我没有这个问题,因为我甚至从来没有在我的系统正确安装 postgres。

这里有一个解决方案,我在 MAC OSX 约塞米蒂工作

  1. 我去 http://postgresapp.com/下载了应用程序。
  2. 我将应用程序移动到 Application/目录
  3. 我将它添加到 $PATH,方法是将它添加到. bashrc 或. bash _ profile 或. zhrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. 我从 Applications 目录运行 postgres,然后再次运行命令,它工作了。

希望这个能帮上忙,再见!

而且,这个答案对我的帮助最大: https://stackoverflow.com/a/21503349/3173748

原因之一可能是

Postgreql.conf 文件中的 unix _ socket _ 目录没有与它正在查找的目录一起列出。

在问题示例中,它正在寻找目录/tmp,这必须在 postgreql.conf 文件中提供

像这样:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

这个办法对我很有效。

如果你正在使用 MacOS 和自制程序,我发现这个答案非常有帮助:

Https://stackoverflow.com/a/27708774/4062901

对我来说,我的服务器正在运行,但是由于升级,我的连接出现了问题(注意: 我使用的是酿酒服务)。如果 Postgres 正在运行,请尝试 cat /usr/local/var/postgres/server.log并查看日志。我的错误是迁移,而不是连接问题。

在手动迁移之后,他们建议(这确实有用,但是)我发现不再有一个表格给我的用户。尝试这个命令来修复: createdb(通过 FATAL: 数据库“ < user >”不存在回答)

我不太了解 Mac 或 Homebrew,但我很了解 PostgreSQL。

您需要找出试图从 PostgreSQL 启动的日志位于何处,以及 PostgreSQL 的套接字目录是什么。在构建 PG 时,默认情况下,套接字目录是/tmp/。如果在构建 PG 并启动 PG 时没有改变这一点,那么在/tmp 中应该可以看到一个套接字文件: ls-al/tmp

套接字文件以“ .”开头,所以您不会看到它以“-a”开头。

如果您在这里没有看到一个套接字,也没有看到任何来自 ps awux | grep postgres 的内容,那么 PG 可能没有运行,或者可能运行了,而且它是安装在 OSX 上的。可能发生的情况是,在侦听 localhost-use netstat-anp 上的端口5432时,可能会发生冲突,以查看5432上的侦听内容(如果有的话)。如果 Mac OSX PG 已经在监听该端口,那么这可能就是问题所在。

希望能帮上忙。我听说自制程序会让事情变得有点难看,我和很多人讨论过,他们鼓励使用虚拟机。

我通过升级 Postgres 来解决这个问题。

brew update
brew upgrade

然后,我还必须升级数据库,以便与新的主版本兼容,因为我从10升级到11。

brew postgresql-upgrade-database

(来源 https://github.com/facebook/react-native/issues/18760#issuecomment-410533581)

只要运行 brew services restart postgresql,一旦出现错误,就重新启动 Postgres,然后再试一次

对于我来说,命令 rm /usr/local/var/postgres/postmaster.pid不工作,因为我安装了一个具体版本的 postgreql 与自制程序。

正确的命令是 rm /usr/local/var/postgres@10/postmaster.pid

然后是 brew services restart postgresql@10

我在使用自制程序在 Mac 10.15.5上运行时遇到了这个错误,这似乎是一个更新的解决方案,可以在上面的解决方案不能工作的地方工作。

有一个名为 postmaster. pid 的文件,当 postresql 退出时应该自动删除该文件。

如果它不执行以下操作

  • 如果在 rm 之前退出,则可能损坏 db
  • Sudo rm/usr/local/var/postgres/postmaster. pid

以下来自另一个 堆栈溢出问题的解决方案帮助了我:

查找 postgres 数据目录。在使用自制的 MAC 上,它是 /usr/local/var/postgres/,其他系统可能是 /usr/var/postgres/

运行以下命令删除 pid 文件:

rm postmaster.pid

重新启动后进程,在 Mac 上运行:

brew services restart postgresql