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

时间:2020-03-18 08:52:44

标签: postgresql 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。更新了pg_hba配置文件 托管所有0.0.0.1/32信任

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

3。更改防火墙规则以允许从端口5432连接 我还需要做什么才能使其正常工作?

1 个答案:

答案 0 :(得分: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之类的东西。

如果您怀疑 psycopg2 Python 有问题,则可以使用PostgreSQL的客户端测试连接性:psql:
psql -U postgres -h 192.168.1.2 db_name