【问题标题】:Cannot connect to postgres from remote host无法从远程主机连接到 postgres
【发布时间】:2011-09-03 06:59:32
【问题描述】:

我有一个运行 postgres 的数据库服务器 (192.168.1.50)。我创建了一个名为“testdb”的数据库和一个密码为“testuserpw”的用户“testuser”。
在本地,我可以使用以下方式连接到数据库:

psql -d testdb -U testuser

当我从另一台主机(192.168.1.60)发出命令时:

psql -h 192.168.1.50 -d testdb -U testuser

我有错误:

psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.50" and accepting
TCP/IP connections on port 5432?

有什么想法吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    连接被拒绝 (0x0000274D/10061) 我在这里修复了:

    打开终端并输入:

    VIM /var/lib/pgsql/data/postgresql.conf
    

    编辑“listen_adresses”,它应该设置为'*'

    在此之后,将其放在终端上:

    /scripts/restartsrv_postgres
    

    【讨论】:

      【解决方案2】:

      我遇到了和你一样的问题,我的问题来源是防火墙设置。 如果您使用的是 Ubuntu,请打印您的防火墙状态: sudo ufw status verbose

      它可能看起来像这样:

      Logging: on (low)
      Default: deny (incoming), allow (outgoing), disabled (routed)
      New profiles: skip
      ...
      

      传入连接的默认规则是“拒绝”,因此您需要指定“允许”端口。

      类型: sudo ufw allow 5432/tcp

      参考: https://www.vultr.com/docs/how-to-configure-ufw-firewall-on-ubuntu-14-04

      【讨论】:

        【解决方案3】:

        检查listen_addresses 在您的postgresql.conf 文件中的设置。许多发行版将其默认为 127.0.0.1,即仅侦听来自 localhost 的连接。应设置为'*' 以侦听所有接口上的连接。

        如果您仍然遇到问题,请使用 lsof 查看 postgres 进程正在侦听的网络套接字。

        【讨论】:

        • 请注意,还有一个 pg_hba.conf 配置文件,可以在其中配置特定机器的信任属性。
        • 对于 Postgres 9,设置文件将位于 /var/lib/postgres/*。但是对于 Postgres 11,这个文件可以在 /etc/postgresql/11/main/ 找到
        【解决方案4】:

        postgresql.conf 中的 listen_address 配置变量并不是让 postgres 监听非本地 IP 地址(或地址)的唯一方法。

        如果您从 pg_ctl 启动 postgres,请使用选项“-o -h *”,否则请在 postgres 命令行中添加“-h”“*”,例如

        /usr/local/pgsql/bin/postgres -D /pg/data "-h" "*"

        当然 /pg/data 必须更改为您当前的数据路径。

        这在实验时特别有用。

        【讨论】:

          【解决方案5】:

          在 Ubuntu 上,我注意到远程访问在某些时候停止工作(当前使用 9.1.9)。原因是,postgres 不再使用 -i 开关 [1] 启动,因此无论您为 listen_addresses 配置什么,它都会被忽略。

          幸运的是,在/etc/environment 中添加以下行可以在注销并重新登录(或重新启动)后解决问题:

          PGOPTIONS="-i"
          

          有关更多选项,请参阅 [2]。请注意,将其添加到 /etc/postgresql/9.1/main/environment 对我不起作用。

          现在,当我在做nmap ip-of-my-remote-server 时,我终于又明白了:

          5432/tcp open  postgresql
          

          耶!

          [1]http://www.postgresql.org/docs/9.1/static/runtime-config-short.html

          [2]http://www.postgresql.org/docs/9.1/static/libpq-envars.html

          【讨论】:

          • 我也在 Ubuntu 13.04 上运行 9.1.9,这一步似乎没有必要。
          • 我发现我必须用单引号替换双引号,它在 postgresql 特定环境文件中工作得很好。此外,在进行此更改后执行 /etc/init.d/postgresql 时,您必须实际使用“停止”和“启动”(而不是简单的重新加载)。
          【解决方案6】:

          防火墙是否允许连接通过?或者,检查pg_hba.conf 是否允许从 localhost 以外的地址进行连接。

          【讨论】:

            猜你喜欢
            • 2016-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-13
            • 2017-09-14
            • 1970-01-01
            相关资源
            最近更新 更多