【问题标题】:Can't connect to postgres database from remote host using psycopg2?无法使用 psycopg2 从远程主机连接到 postgres 数据库?
【发布时间】:2020-03-18 08:52:44
【问题描述】:

我无法使用 psycopg2 通过远程主机连接到 postgres 数据库并收到类似的错误

错误:

    File "/usr/lib64/python2.7/site-packages/psycopg2/__init__.py", line 126, in connect
     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
     psycopg2.OperationalError: could not connect to server: Connection timed out
    Is the server running on host "192.x.x.x" and accepting
    TCP/IP connections on port 5432?

注意:我做了以下更改

1.更新了 pg_hba 配置文件 托管所有所有 0.0.0.1/32 信任

2.更新了postgresql文件 listen_addresses = '*'

3.更改防火墙规则以允许从端口 5432 连接 我还需要做什么才能让它发挥作用?

【问题讨论】:

  • 错误消息提示客户端无法访问服务器,因此请确保 postgres 正在侦听所需的接口:sudo ss -lntp | grep 5432。设置listen_address后重启服务了吗?
  • 范围0.0.0.1/32只包含一个主机(0.0.0.1);我怀疑这是您要允许的地址,但可以在 TCP 连接正常后修复。
  • "更改了防火墙规则以允许从端口 5432 连接" 您需要允许连接 5432。
  • 是的,我已经完成了
  • 确保listen_addresses = '*' 行没有在配置文件中注释;您确定您正确地重新启动了服务吗? ps aux | grep postgres 的输出是什么?使用 pastebin 之类的东西粘贴它。

标签: postgresql psycopg2


【解决方案1】:

对于可能遇到相同问题的其他人,您可以尝试以下方法。

确保服务正在侦听所需的接口

sudo ss -lntp | grep 5432

如果您看到类似 127.0.0.1:5432::1:5432 的内容,则表示 localhost
调整postgresql.conf

listen_addresses='192.168.1.2, 127.0.0.1'

您也可以使用 '*',这意味着任何接口,但根据您的网络配置,它可能很危险。
确保listen_addresses 行没有被注释(如上面的情况)并在进行更改后重新启动服务。

检查您的防火墙配置
确保服务在正确的接口上侦听后,请确保您的防火墙(如果有)允许客户端连接到服务(这可能意味着您的本地防火墙、介于两者之间的网络设备)客户端和服务)。

查看pg_hba.conf
此文件控制 PostgreSQL 的基于主机的身份验证机制:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.1.3/32          md5

以上行允许所有用户从192.168.1.3 连接,前提是他们提供了所需的密码;如果你想允许整个子网,你可以使用 192.168.1.0/24 之类的东西。

如果您怀疑 psycopg2Python 存在问题,您可以使用 PostgreSQL 的客户端测试连接:psql:
psql -U postgres -h 192.168.1.2 db_name

【讨论】:

  • 如果您的问题得到解答,请将其标记为solved
猜你喜欢
  • 2011-09-03
  • 2011-07-18
  • 2019-12-14
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2014-05-07
  • 2017-06-02
相关资源
最近更新 更多