远程连接PostgreSQL服务器超时,基础配置后仍报错求排查
客户端环境与代码
家中笔记本作为客户端,通过Python+SQLAlchemy编写远程数据库读取程序connect_to_db_in_another_comp.py,代码如下:
from sqlalchemy import create_engine from sqlalchemy.engine import URL from sqlalchemy.orm import sessionmaker from models import Base url = URL.create( database="Test-connect-2", username="postgres", host="192.168.XXX.XX", password="123", port=5432, drivername="postgresql", ) engine = create_engine(url) connection = engine.connect() # traceback start here Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() all_records = session.query(User).all() for i in all_records: print(i.user_name)
错误信息
运行程序后触发连接超时错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
connection to server at "192.168.XXX.XX", port 5432 failed: Connection
timed out (0x0000274C/10060) Is the server running on that host and
accepting TCP/IP connections ?
服务器侧配置
台式机作为服务器,安装PostgreSQL 16(pgAdmin 4管理),已创建Test-connect-2数据库及user表,服务器属性:
- Host name/address: 192.168.XXX.XX
- Port: 5432
- Maintenance database: postgres
- Username: postgres
已在pg_hba.conf末尾添加规则:host all all 0.0.0.0/0 md5,且关闭两台设备防火墙及杀毒软件。
排查建议
修改PostgreSQL监听地址
打开服务器的postgresql.conf配置文件,找到listen_addresses参数,修改为listen_addresses = '*'(默认是localhost,仅允许本地连接),修改后必须重启PostgreSQL服务。验证网络连通性
- 在客户端执行
ping 192.168.XXX.XX,确认服务器IP可达。 - 用端口测试工具验证5432端口开放:执行
telnet 192.168.XXX.XX 5432或nc -zv 192.168.XXX.XX 5432,如果连接失败说明端口未对外开放。
- 在客户端执行
确认PostgreSQL服务状态
在服务器上检查PostgreSQL服务是否正常运行,确保服务没有异常停止。代码小问题提示
代码中使用session.query(User).all()但未导入User模型,需补充from models import User,否则后续查询会触发NameError。
内容的提问来源于stack exchange,提问作者Paul

