ChatGPT解决这个技术问题 Extra ChatGPT

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

像其他一些人一样,当我在我的项目中运行 rake db:migrate 甚至为我的 Ruby on Rails 3.2 应用程序尝试大多数数据库任务时,我遇到了这个错误。

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

我很久以前用 Homebrew 安装了 PostgreSQL,最近尝试安装 MongoDB 后,我的 PostgreSQL 安装从未如此。我正在运行 OS X v10.6 Snow Leopard。

出了什么问题,我如何更好地了解 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

我该如何解决?我没看到什么?

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

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

我尝试了以下并得到如下结果。

$ psql -p 5432 -h 本地主机

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 does not accept connections on /tmp/.s.PGSQL.5432。我仍然希望有人能对在 OS X 上安装 PostgreSQL 背后的概念以及为什么这一切如此困难做出一个体面的解释。

帮助排除故障的最新见解:

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

然后运行:

$ echo $PATH

要考虑的关键是:

确保要运行的 PostgreSQL 副本的路径条目位于 OS X 系统的 PostgreSQL 路径之前。

这是一个核心要求,它决定了运行哪个 PostgreSQL,据我所知,这会导致大多数这些问题。

你有没有找到解决方案?我看到你没有标记一个。这些都没有帮助我。
它仍然主要是伏都教和奇怪的化身才能让它发挥作用。我刚刚在上面添加了 [Edit 2] 并带有一个链接,其中包含更多建议以及如何根据我的编辑评论进行符号链接。 Symlink 最终为我工作,但我想我还在那里卸载并重新安装了 postgres 和 homebrew,所以很难确切知道是什么造成了不同。祝你好运。如果您发现任何新内容,请报告,这个问题有 15,000 次浏览,这让很多人感到痛苦!
@AndrasGyomrey 我刚从澳大利亚的 RailsCamp15 回来,人们说关键是要让你的路径文件正确,我在上面的编辑 3 中进行了编辑来解释这一点。
请记住,launchctl 报告某些内容已加载并不一定意味着它已启动并正在运行。您应该看看 bigsql.com 作为替代方案;适用于 Mac 并具有良好的管理 UI。

V
Vlad Z.

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

删除它并启动服务器。

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


这对我有用。我刚刚安装了优胜美地,并从自制软件中加载了 postgres。我第一次使用它工作正常,但重新启动后出现此问题。那么,你能解释一下为什么会这样吗?
为我工作,但对于新手,有人可以解释为什么以及如何安全
@AlexanderMills 如果您删除/usr/local/var/postgres/postmaster.pid postgres 实例正在运行,您将不得不使用不好的实例。不好,如非确定性数据库行为、竞争条件等。但如果你确定没有 postgres 正在运行,删除是安全的
M
Mark Swardstrom

对我来说,这行得通

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

就我而言,删除 pid 后,我需要使用 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 重新启动 postgresql
我还必须重新启动 postgres,当由 homebrew 安装时,你可以这样做:brew services restart postgresql
我在 docker env No such file or directory
rm:/usr/local/var/postgres/postmaster.pid:没有这样的文件或目录
R
RobKohr

如果您在 OS X 上,“Postgres.app”是一个更好的解决方案

这是修复:

停止数据库 cd /var sudo rm -r pgsql_socket sudo ln -s /tmp pgsql_socket chown _postgres:_postgres pgsql_socket 重启 PostgreSQL(不是你的电脑)

更多信息请参见“postgresql 9.0.3. on Lion Dev Preview 1”。


错误回来了,这个修复没有帮助。我觉得我在一个黑暗的房间里四处奔波,努力了解实际发生的事情以及自己应用修复的过程。你能解释一下我如何诊断和解决这个问题吗?
为我工作。将 /tmp 改成 _postgres 感觉有点奇怪,但是嘿 :)
postgresapp 工作,但为什么我不能在终端启动我的服务器?在我退出此应用程序后,问题按预期再次出现。
这对我有用,但请注意,您必须是 root 或使用 sudo 来执行 #2 - 4。另外,请澄清步骤 #5 - 您只需要重新启动 postgres,而不是计算机。
大写字母没有更好的答案。通过 Homebrew(服务)安装和运行 Postgres 仍然非常好。
t
the Tin Man

对于您提到的错误,这对我有用。执行以下操作之一:

如果您在安装时使用了默认端口 5432 以外的其他端口,则可以更改您在 postgres.conf 文件中指定的默认端口。更改 postgresql.conf 中的端口号并重新启动数据库服务器。而不是 psql 键入完整的命令: psql -p 5432 -h localhost 服务器名称和端口号


1. 我认为我的安装会按照默认设置。
2.我可以改变这个,改变端口有什么影响吗?
3.添加了我上面3的输出。
选项 3 与自定义端口一起使用。因为我安装了多个 pg 服务器(PostgreSQL 9.1、9.2 和 9.3),所以我还必须指向正确的 psql。
b
borrible

如果您正在运行 Homebrew,请卸载 Postgresql end pg gem:*

$ 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

要在登录时启动 postgresql,请运行:

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

或者手动启动。

安装 pg gem

$ gem install pg

我希望有帮助


brew info postgresARCHFLAGS="-arch x86_64" gem install pg
这不会删除数据库中的记录吗?
initdb /usr/local/var/postgres -E utf8 有效。谢谢一堆。
N
Nelu

我通过升级 postgres 解决了这个问题。

brew update
brew upgrade

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

brew postgresql-upgrade-database

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


我收到此错误错误:未安装 postgresql 9.3.* 版本!
t
the Tin Man

当我将 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

Homebrew install specific version of formula?”提供了更全面的解释以及解决问题的替代方法。


感谢您的贡献和明确的指示以重复您的修复。您包含的那个链接肯定是全面的,我目前没有 postgres 的问题,所以我不确定这对其他人有多大用处,但如果您觉得这对其他任何人有用,请在此处发表评论。
我发现它有用且相关,尽管可能不是直接的。他通过切换版本解决了这个问题,使用 brew,这是一个相当常见的工具,只是重复了这些步骤,到目前为止,很好,链接涉及到更多特定于 brew 的问题,但是,所以我可以看到你质疑它的价值在OP的问题的背景下。
R
RobKohr

我在使用自制软件在 Mac 10.15.5 上运行时遇到了这个错误,这似乎是一个更新的解决方案,适用于上述解决方案。

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

如果它不执行以下操作

brew services stop postgresql <--- 在 rm 之前无法退出可能会损坏数据库

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


C
Community

所以对于这里的很多问题,似乎人们已经在运行 psql 并且不得不删除 postmaster.pid。但是,我没有这个问题,因为我什至从来没有在我的系统中正确安装过 postgres。

这是一个在 MAC OSX Yosemite 中对我有用的解决方案

我去了 http://postgresapp.com/ 并下载了该应用程序。我将应用程序移动到 Application/ 目录我通过将其添加到 .bashrc 或 .bash_profile 或 .zshrc 将其添加到 $PATH : export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin 我运行了应用程序目录中的 postgres 并再次运行该命令并且它工作。

希望这可以帮助!面条!

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


这不是指向 Postgres 应用程序而不是 brew 安装吗?这可能会使您无法使用一些有用的软件包(例如 pgrouting,您无法为 Postgres 应用程序安装它,这给我带来了无尽的悲伤,我现在就在这里)
o
oenpelli

当您运行: psql -p 5432 -h localhost 它不使用环回驱动程序,而是使用真正的套接字,因此您需要配置 postgres 以接受套接字连接。因此,即使 pgadmin 和其他客户端可以工作,psql 也不会。

您需要同时更改 postgresql.conf 文件和 pg_hba.conf 文件,以便允许通过真实套接字进行连接。这也将允许从远程 IP 连接,这就是默认禁用它的原因。

这些文件位于数据目录中,但实际位置可能会有所不同,具体取决于 postgres 的安装方式。运行 postgres 后,运行以下命令:

ps -ef | grep postmaster

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

对于 postgresql.conf 文件,取消注释 listen_address 并将其更改为:

listen_address = '*'

对于 pg_hba.conf 添加以下行:

host all all 0.0.0.0/0 md5

S
Stephen Frost

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

您想弄清楚试图启动 PostgreSQL 的日志在哪里,以及 PostgreSQL 的套接字目录是什么。默认情况下,当你构建 PG 时,socket 目录是 /tmp/。如果您在构建 PG 并启动 PG 时没有更改它,那么您应该能够在 /tmp 中看到一个套接字文件:ls -al /tmp

套接字文件以“.”开头,因此您不会看到它带有 ls 的“-a”。

如果您在那里看不到套接字,并且您在 ps awux | 中看不到任何东西grep postgres,然后 PG 可能没有运行,或者它可能是并且它是 OSX 安装的。可能发生的情况是,您可能在 localhost 上侦听端口 5432 时遇到冲突 - 使用 netstat -anp 查看在 5432 上侦听的内容(如果有的话)。如果 Mac OSX PG 已经在侦听该端口,则可能成为问题。

希望有帮助。我听说自制软件会让事情变得有点难看,我交谈过的很多人都鼓励使用虚拟机。


感谢您为此做出贡献。如果它有助于为您提供更多背景知识,自制软件只需在安装 postgres 时运行此脚本。 github.com/Homebrew/homebrew-core/blob/master/Formula/… 我希望您可以看一看,并可能分享您发现的任何进一步的见解。我认为人们需要的是一种更简单的方法来调试为什么会出现此错误,以便他们知道要采取什么措施。
根据我对该脚本的理解,“var”目录中有一个“postgres.log”,可能在 HOMEBREW_PREFIX 下。该日志文件将包含有关 PG 尝试启动的信息(包括是否由于某种原因无法启动)。这是一个示例消息,显示 PG 由于另一个进程在端口 5432 上侦听而无法启动:
2016-12-19 09:11:59.582 EST [20669] 日志:无法绑定 IPv4 套接字:地址已在使用中 2016-12-19 09:11:59.582 EST [20669] 提示:另一个邮递员是否已经在端口 5432 上运行?如果没有,请等待几秒钟,然后重试。 2016-12-19 09:11:59.582 EST [20669] 警告:无法为“localhost”创建监听套接字 2016-12-19 09:11:59.582 EST [20669] 致命:无法创建任何 TCP/IP 套接字 2016 -12-19 09:11:59.582 EST [20669] LOG:数据库系统已关闭
此外,该脚本似乎没有更改默认套接字目录,因此应该是 /tmp/。您可以在 PG 数据目录(似乎是 {HOMEBREW_PREFIX}/var/postgres)中查找 postgresql.conf 文件并查找“unix_socket_directories”。它默认被注释掉,但有默认设置,例如:
#unix_socket_directories = '/tmp' # 逗号分隔的目录列表
Z
ZinkLu

对我来说,命令 rm /usr/local/var/postgres/postmaster.pid 不起作用,因为我用自制软件安装了特定版本的 postgresql。

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

然后 brew services restart postgresql@10


S
SocoM

原因

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

解决方案

卷曲 http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh |嘘

通过

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


P
Pstrazzulla

您收到此错误的一个原因是您的本地 postgres 数据库在您重新启动计算机时关闭。在新的终端窗口中,只需键入:

$psql -h localhost 

重新启动服务器。


c
crazzyaka

Hello world :)
对我来说最好但奇怪的方法是做接下来的事情。

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

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

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

psql

Postgres93.app

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

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

5) 此外,如果您想以图形方式查看数据库,您应该安装 PG Commander.app。将您的 postgres 数据库视为漂亮的数据表的好方法

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


P
Peter Mortensen

我有 PostgreSQL 9.3 并得到了同样的错误,

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

我使用以下方法解决了这个问题:

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

这个对我有用。


这个文件对我来说不存在
V
Volodymyr Fedorchuk

无论如何,当我的 pg_hba.conf 文件 (/etc/postgresql/9.5/main/pg_hba.conf) 中有错字(md4 而不是 md5)时,我遇到了同样的错误

如果您像我一样来到这里,请仔细检查该文件一次,以确保其中没有任何可笑的东西。


pg_hba.conf 文件在哪里?
/etc/postgresql/{postgres_version}/main/pg_hba.conf
K
Kanke

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


A
Alex Tamoykin

在本地运行 PostgreSQL 可能会有不同的问题。我建议清理所有已安装的 postgres 版本并重新开始。安装后,如果您的 rails 项目具有最新的 db/schema.rb,则重新创建数据库非常容易

这是我通常的install PostgreSQL on a Mac。如果您在本地以 root 用户身份运行数据库,您可能希望省略创建 todo 用户的最后一步


K
Kiran K Telukunta

原因之一可能是

postgresql.conf 文件中的 unix_socket_directories 未与它要查找的目录一起列出。

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

像这样的东西:

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

这个解决方案对我有用。


C
Community

如果您使用的是 MacOS 并使用自制软件,我发现这个答案非常有帮助:

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

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

同样在他们提出的手动迁移之后(确实有效,但是)我发现我的用户不再有一个表。试试这个命令来解决这个问题:createdb(通过 psql: FATAL: database "<user>" does not exist 回答)


J
Jonas Frei

来自不同 stackoverflow question 的以下解决方案帮助了我:

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

通过运行删除 pid 文件:

rm postmaster.pid

重新启动postgress。在 Mac 上,运行:

brew services restart postgresql

P
Peter Mortensen

这很简单。仅在您的 database.yaml 文件中添加主机。


主机:127.0.0.1 或主机:本地主机例如。
每个人都喜欢简单的解决方案。但这是如何工作的?正如我在上面的评论中所说,对此进行搜索使我走上了许多复杂的道路。您能否详细说明一下,并就您所看到的问题的真正含义以及这个简单的更改如何解决该问题向我们提供更多背景信息。感谢您为此做出贡献! :)
不同之处在于 IP 连接无需担心套接字文件的位置;相反,您担心 IP 地址。