ChatGPT解决这个技术问题 Extra ChatGPT

无法连接到端口 5432 上的 Postgresql

我在运行 Ubuntu Server 14.04 的服务器上安装了 PostgreSQL 9.3。

如果我通过终端 ssh 进入服务器,我可以连接 psql。但是当我尝试配置 pgAdmin III 进行远程连接时,我得到:

服务器不监听 服务器不接受连接:连接库报告无法连接到服务器:连接被拒绝 服务器是否在主机“172.24.3.147”上运行并接受端口 5432 上的 TCP/IP 连接?

当我在服务器 service postgresql status 上运行时,它给了我:

9.3/main (port 5432): online

所以我当然在这里遗漏了一些重要的东西。

编辑

在服务器上运行 netstat -na 时,我得到(我猜是相关部分):

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp        0      0 172.24.3.147:22         172.24.3.240:61950      ESTABLISHED
tcp        0      0 172.24.3.147:22         172.24.3.240:60214      ESTABLISHED
你没有绑定到那个ip。 pg 在听别的东西,比如 127.0.0.1:5432
“绑定”是什么意思?当我尝试通过 pgAdmin 连接时,我正在使用服务器的端口(在 ssh 中使用)。
你必须告诉 pg 监听连接的接口/IP。如果它只绑定到 127.0.0.1:5432,那么对 172.24.3.147:5432 的任何尝试都将不起作用,因为没有任何东西在监听该 ip:port 组合
根据您的评论,它应该在端口 22 上读取(为什么,如果默认值为 5432?),对吗? (这就是上面 State=ESTABLISHED 行中的内容)。但是当我尝试连接到 pgAdmin 上的那个端口时,我得到一个不同的错误:“发生错误:14:57:13:错误:连接到服务器时出错:SSL 错误:来自服务器的未知协议预期身份验证请求,但是收到S"
22端口是ssh,和postgres无关。

J
Jan Marek

您必须编辑 postgresql.conf 文件并使用“listen_addresses”更改行。

您可以在 /etc/postgresql/9.3/main 目录中找到此文件。

默认的 Ubuntu 配置只允许 localhost(或 127.0.0.1)接口,当每个 PostgreSQL 客户端作为 PostgreSQL 服务器在同一台计算机上工作时,这足以使用。如果您想从其他计算机连接 PostgreSQL 服务器,您可以通过以下方式更改此配置行:

listen_addresses = '*'

然后你也可以编辑 pg_hba.conf 文件。在此文件中您已设置,您可以从哪些计算机连接到此服务器以及您可以使用哪种身份验证方法。通常你会需要类似的行:

host    all         all         192.168.1.0/24        md5

请阅读此文件中的评论...

编辑:

编辑 postgresql.conf 和 pg_hba.conf 后,您必须重新启动 postgresql 服务器。

EDIT2:突出显示的配置文件。


“192.168.1.0”是连接到 Postgres DB 的远程服务器吗?为什么是 24 端口?
@ScottSkiles 192.168.1.0 是网络地址,/24 不是端口号,而是以比特为单位的网络掩码长度(255.255.255.0)。换句话说:允许来自网络 192.168.1.0/255.255.255.0、地址从 192.168.1.1 到 192.168.1.254 的计算机
所以单个 IP 将是(对于 192.168.1.1):192.168.1.1/1?
@ScottSkiles 单个 ip 将是 192.168.1.1/32
你说的是哪个文件?至少有 5 个 conf 文件。
a
akshay gore

取消注释 postgresql.conf 中的 listen_addresses = '*'

这已经咬了我第二次,所以我认为可能值得一提。 postgresql.conf 中的 listen_addresses = '*' 行默认是注释的。更新后一定要取消注释(去掉井号,#开头),否则远程连接会继续被阻塞。

PS:psql -U postgres -c 'SHOW config_file' - 定位 postgresql.conf 文件路径


我花了一整天的时间。非常感谢!
m
max56

通过命令行连接的 psql 和 pgAdmin 没有在 RDS 上与 AWS 连接有同样的问题。我确实将我的 RDS 设置为可公开访问。我确保我的 ACL 和安全组完全开放并且仍然存在问题,所以我执行了以下操作:sudo find . -name *.conf 然后 sudo nano ./data/pg_hba.conf 然后添加到 pg_hba.conf 文件 host all all 0.0.0.0/0 md5 中的指令顶部,并且 pgAdmin 自动让我登录。

这也适用于没有任何 IP 地址的 pg_hba.conf 文件 host all all md5,这也适用于我的 IP 地址 host all all <myip>/32 md5

附带说明一下,我的 RDS 在我的默认 VPC 中。我的非默认 VPC 中有一个相同的 RDS 实例,其安全组、ACL 和安全组设置与我的默认 VPC 相同,但我无法让它工作。不知道为什么,但那是另一天。


E
Eric Aya

记得检查防火墙设置。在检查并仔细检查了我的 pg_hba.confpostgres.conf 文件后,我终于发现我的防火墙覆盖了所有内容,因此阻止了连接


r
rtfmpliz

只是从接受的答案中总结

如果像我这样的人忽略了必须编辑的文件名

在我的情况下,conf文件位于

/etc/postgresql/14/main'

如果您输入 cd /etc/postgresql/14/main

所以只需 sudo nano 添加这 2 个文件名

postgresql.conf

listen_addresses = '*'

取消注释此行并将 localhost 更改为 *

pg_hba.conf

host all all 0.0.0.0/0

将 127.0.0.1/32 更改为 0.0.0.0/0

最后不要忘记使用 sudo service postgresql restart 重新启动

我希望这个清除通知错误


没有帮助我的连接被拒绝...
D
Dinesh Penugonda

您必须编辑 pg_hba.conf 以接受网络内的所有请求

#TYPE  DATABASE        USER            ADDRESS                 METHOD 
host    all             all             0.0.0.0/0                md5
host    all             all             ::1/128                  md5

在您的应用程序中,您可以使用此 IP 地址进行连接,如下例所示:-

postgresql://postgres:******@192.168.1.101:5432/app


只有这个对我有用。谢谢!
D
Daniel Kravetz Malabud

您可能需要打开端口以在您的 LAN(或外部)中访问它或将网络地址绑定到端口(让 PostgreSQL 在您的 LAN 上侦听,而不仅仅是在 localhost 上)


抱歉,作为一个终生的 PC 开发人员,我对这个端口的东西并不完全熟悉。现在我只需要在我们的局域网(一个基于代理的机构网络)内访问它。你剩下的信息对我来说是无法理解的。请看其他评论。
Jan Marek 的答案应该是您正在寻找的。 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 此行显示 Postgre 仅侦听来自运行 postgre 的同一台计算机的连接,而不是来自本地网络的连接。
好的。但是你们怎么知道所选行是关于 Postgres 的?因为 5432 是他们的默认端口号?
正确的。它只显示两个端口,22 是 SSH 的默认端口,您已经提到您正在使用 SSH,而 5432 是 Postgres 的默认端口,您提到您正在使用并遇到问题。
A
Adrian Stanica

MacOS系统升级后我遇到了同样的问题。通过用 brew 升级 postgres 解决了这个问题。详细信息:系统似乎正在尝试使用较旧的 Postgres 10 设置访问 Postgres 11。我确定这是我过去某个地方的错误,但幸运的是,通过上面的升级,这一切都得到了解决。


S
Scott Moore

我有同样的问题。我最初安装的是版本 10,因为那是 Ubuntu 18.04 的默认安装。我后来升级到 13.2 因为我想要最新版本。我做了所有的配置修改,但它仍然只是 1207.0.0.1 然后我想 - 也许它正在查看版本 10 的配置文件。我修改了这些并重新启动了 postgres 服务。答对了!它绑定到 0.0.0.0

我需要完全删除 10 并确保我强制服务在 13.2 版本下运行,因此如果您从另一个版本升级,请尝试更新该旧目录中的其他配置文件。


也有同样的问题。我已经升级了我的 PostgreSQL 版本,结果发现编辑旧版本的配置是要走的路。
O
OZLEM CITCI

我使用自制软件来启动我的服务器。

1)停止服务器(但它不工作。这是问题)

酿造服务停止 postgresql

2)如果需要进行更新

brew postgresql-升级数据库

3)下面的评论解决了我启动服务器的问题。而已

brew 服务启动 postgresql


d
drosanda

如果首先发生错误,您必须阅读日志。

这仅适用于通过 mac 上的 brew 安装 postgresql *

首先,您必须通过运行检查 postgresql 状态

brew services 在您的终端上

如果停止,请尝试启动它,然后再次运行 brew services

如果状态显示错误,您可以通过 *.plist 文件轻松找到日志位置。

例如,在我的配置中

cat /Users/drosanda/Library/LaunchAgents/homebrew.mxcl.postgresql@12.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>homebrew.mxcl.postgresql@12</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/postgresql@12/bin/postgres</string>
        <string>-D</string>
        <string>/usr/local/var/postgresql@12</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/usr/local/var/log/postgresql@12.log</string>
    <key>StandardOutPath</key>
    <string>/usr/local/var/log/postgresql@12.log</string>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
</dict>
</plist>

以下是日志文件内容:

2021-11-30 09:07:20.154 WIB [3891] FATAL: lock file "postmaster.pid" already exists

2021-11-30 09:07:20.154 WIB [3891] HINT: Is another postmaster (PID 422) running in data directory "/usr/local/var/postgresql@12"?

就我而言,由于PID文件仍然存在导致postgresql无法启动。

通过删除 postmaster.pid 文件很容易修复。

只需添加一个以后可能对某人有用的答案。


j
joy

windows === 按WIN + R //打开服务类型-services.msc 找到postgres-双击它。属性框打开然后点击开始享受。


正如目前所写的那样,您的答案尚不清楚。请edit添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以找到有关如何写出好答案的更多信息in the help center
J
Johnny D

为另一种可能性添加更新的答案。在 AWS EC2 上运行 postgres 10 我必须通过 Windows Defender 防火墙添加自定义入站规则以允许端口 5432。


S
Swiss bobo

对于来自 docker 和其他应用程序问题的任何其他人,如 node js 或 Django 或任何其他问题

我面临这个问题 2 天或更长时间观看视频教程似乎没有任何工作虽然我说我错过了一些但这里是对我有用的解决方案

而不是 PGHOST 的本地主机

您必须指定您的服务名称

例如

    image: postgres
    container_name: postgresdb
    restart: always
    env_file:
      - ./env/.env
    volumes:

那么你的主机必须是 PGHOST:nodeapp-db


K
Kmb40

有同样的问题,搜索导致许多复杂的过度解决方案。最终这个问题是在 Ubuntu 上安装 Postgres 后没有设置密码。

解决方案:

从 Postgres 终端 - 通过输入“sudo -u postgres psql”进入,这将导致“postgres=#”... 使用“\password postgres”设置密码 使用新密码和用户名“postgres”更新 PG Admin

参考 https://www.cherryservers.com/blog/how-to-install-and-setup-postgresql-server-on-ubuntu-20-04


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅