【问题标题】:Can't connect to Postgresql on port 5432无法连接到端口 5432 上的 Postgresql
【发布时间】:2016-11-22 19:12:57
【问题描述】:

我在运行 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没有关系。

标签: postgresql ssh port remote-access


【解决方案1】:

您必须编辑 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

请阅读此文件中的 cmets...

编辑:

编辑完 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 文件。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    通过命令行连接的 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 自动让我登录。

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

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

        只是从接受的答案中总结

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

        在我的例子中,conf 文件位于

        /etc/postgresql/14/main'

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

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

        1. postgresql.conf

        listen_addresses = '*'

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

        1. 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重新启动

        我希望这个可以清除通知错误

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

            • 也有同样的问题。我已经升级了我的 PostgreSQL 版本,结果发现编辑旧版本的配置是要走的路。
            【解决方案9】:

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

            • 这仅适用于通过 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 文件很容易修复。

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

            【讨论】:

              【解决方案10】:

              您必须编辑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

              【讨论】:

                【解决方案11】:

                我使用 home-brew 来启动我的服务器。

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

                brew services 停止 postgresql

                2) 如果需要,进行更新

                brew postgresql-upgrade-database

                3)下面的评论解决了我启动服务器的问题。就是这样

                brew services 启动 postgresql

                【讨论】:

                  【解决方案12】:

                  windows === 按WIN + R //打开服务 类型 - services.msc
                  找到 postgres - 双击它。

                  属性框打开然后点击开始 享受。

                  【讨论】:

                  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                  猜你喜欢
                  • 2019-08-15
                  • 1970-01-01
                  • 2013-11-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-11-20
                  • 2014-05-10
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多