Postgresql无法远程连接

文章详细介绍了在CentOS5环境下,使用WinXP通过psql工具连接远程服务器上运行的PostgreSQL服务时遇到的Connection refused错误。重点在于通过修改配置文件`postgresql.conf`中的`listen_addresses`参数,由原来的`localhost`更改为`'*'`,以允许其他客户端访问。此解决方案解决了连接问题,并提供了完整的排查步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境: CentOS 5, Postgresql 9, WinXp


通过winXP上的psql连接远程服务器上postgresql服务,出现错误:
C:\Documents and Settings\rand>psql -U postgres -d postgres -h 10.71.88.251 -p 5432
psql: 无法联接到服务器: Connection refused (0x0000274D/10061)
        服务器是否在主机 "10.71.88.251" 上运行并且准备接受在端口
5432 上的 TCP/IP 联接?

之前配置过pg_hba.conf上的信息:
host    all             all             10.71.88.252/32         trust    --注10.71.88.252为winxp的IP地址

经排错,发现postgresql.conf中有一个监听器地址参数为#listen_addresses = 'localhost', 必须将其修改为listen_addresses = '*',以便可以让其它客户端来访问。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16582684/viewspace-734091/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16582684/viewspace-734091/

### 配置 PostgreSQL 允许远程连接 为了使 PostgreSQL 数据库能够接受来自其他主机的远程连接,需要完成以下几个方面的配置: #### 修改 `postgresql.conf` 文件 在 PostgreSQL 的配置文件 `postgresql.conf` 中,设置监听地址以允许外部 IP 访问。通过修改 `listen_addresses` 参数来实现这一点。将其值更改为 `'*'` 或者指定具体的 IP 地址列表[^1]。 ```bash listen_addresses = '*' ``` 这一步使得 PostgreSQL 能够接收来自任何网络接口上的请求。 #### 更新 `pg_hba.conf` 文件 `pg_hba.conf` 是用于定义客户端认证方法的重要文件。为了让远程客户端成功访问数据库,需在此文件中添加合适的记录条目[^2]。例如,下面这条规则表示允许所有 IPv4 客户端使用 MD5 密码验证方式登录名为 `mydb` 的数据库: ```plaintext host mydb all 0.0.0.0/0 md5 ``` 上述配置意味着从任意 IP (`0.0.0.0/0`) 来源都可以尝试基于用户名和密码的身份验证过程[^3]。 #### 确认防火墙设置并开放必要端口 即使完成了以上两步操作,还需要确保操作系统层面没有阻止对外部世界的通信流量。通常情况下,默认使用的 TCP/IP 协议中的 5432 端口号应该被显式暴露给公网或内部局域网环境内的设备可见^。 可以通过执行如下命令检查当前运行实例实际绑定到了哪些地址上: ```bash ss -tlnp | grep postgres ``` 如果没有发现除了回环适配器之外还有别的地方,则说明可能仍然局限于仅限本机通讯模式下工作着. #### 测试远程连通性及故障排查 当一切准备就绪之后,请记得重新启动 PostgreSQL 服务以便应用所做的更改: 对于 systemd 控制的服务来说, ```bash sudo systemctl restart postgresql ``` 最后测试一下能否正常建立远距离的数据交互关系。如果遇到问题无法达成预期效果的话,可以从这几个方面入手寻找原因:确认目标服务器确实开启了对应端口;核查路由表是否存在阻碍数据包传递的因素等等. ```python import psycopg2 try: connection = psycopg2.connect( user="your_username", password="your_password", host="remote_host_ip", port="5432", database="your_database" ) except Exception as error: print(f"Error connecting to the database: {error}") finally: if 'connection' in locals(): connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值