无法使用 psycopg2 从远程主机连接到 postgres 数据库?

Can't connect to postgres database from remote host using psycopg2?

我无法使用 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.updated pg_hba 配置文件 托管所有所有 0.0.0.1/32 信任

2.updated postgresql 文件 listen_addresses = '*'

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

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

确保服务正在侦听所需的接口[=52​​=]

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 行未被注释(如上例所示)并在进行更改后重新启动 服务。

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

勾选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