连接远程数据库时出现错误:"psql: could not connect to server: Connection refused"。

115
我正在尝试使用以下命令连接到安装在远程服务器上的Postgres数据库: psql -h host_ip -U db_username -d db_name 发生以下错误: psql: could not connect to server: Connection refused Is the server running on host "<host_ip>" and accepting TCP/IP connections on port 5432?
以下是需要注意的几点:
1. Postgres安装版本为9.4。 2. 主机操作系统:Ubuntu 15.04。 3. 客户端操作系统:Centos 7。
我已经尝试了以下方法,但问题仍未解决:
1. 编辑pg_hba.conf文件以包括:
host all all 0.0.0.0/0 md5
2. 编辑'postgresql.conf'并将监听参数更改为: listen_addresses='*'
  1. 重新启动了Postgres服务。
  2. 在主机和客户端上禁用了防火墙和iptables。
  3. 我通过在本地运行psql命令进行了检查,它可以正常工作。
  4. 我尝试了此question中给出的第二个解决方案。运行nmap命令后,我得到了以下输出:

Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST Nmap scan report for 10.17.250.250 Host is up (0.0000040s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http

我有什么遗漏吗?希望有人能帮忙。


防火墙仍然阻止端口5432的访问。请检查您的iptables配置。 - Dmitry S
@Dmitry 我通过运行 sudo ufw disable 禁用了 iptables,但我仍然收到相同的错误。 - Poonam Anthony
你可以尝试执行命令 'netstat -na | grep 5432',看看PostgreSQL是否绑定到所有接口? - kometen
只有这个语句,才能让我避免花费大量时间来托管所有0.0.0.0/0 md5。 - ShivarajRH
20个回答

1
我认为你正在使用机器名称而不是主机的IP地址。
当我尝试使用机器名称时,我遇到了相同的错误。因为只有在客户端和主机都在同一网络下并且安装有相同的操作系统时才允许这样做。

1
另一种情况是,postgresql.confpg_hba.conf文件未位于/etc/postgresql/9.1/main/。因为postgres可以在任何你设置的位置启动。

例如,当你使用命令pg_ctl -D /tmp/pgsql/ start时,postgresql.confpg_hba.conf将位于/tmp/pgsql/


1
以下内容适用于macOS Mojave:

$sudo mv /usr/local/var/postgres /usr/local/var/postgres.save
$brew uninstall postgres
$brew install postgres

0
尝试迁移数据库。例如,如果您正在使用Heroku托管项目并使用Django,则尝试heroku run python manage.py migrate命令;错误应该会消失。

0

我遇到了完全相同的问题,我的配置文件也是正确的。在我的情况下,问题来自我使用的Eduroam wifi:当我通过另一个wifi连接时,一切正常。看起来Eduroam阻止了端口5432,至少在我的大学里是这样。


0
对我来说,我只是在pgAdmin4 GUI界面的服务器下方删除了现有的PostgreSQL 14服务器,然后从pgAdmin4的快速链接选项中手动添加了一个新服务器。
我遵循了bitnami.com的文档。

details for adding new server


0

这里还有一个:
主机和远程都在真实的服务器上
你需要精确地使用'*'
'localhost,xxx.xxx.xxx.xxx'不起作用。 所有这些答案(我看到了两个)都应该被清除。
你不需要的是:host all all 0.0.0.0/0 md5和这些东西


0

我在通过5432访问外部服务器时遇到了问题。 我注意到除了我的网络之外,任何其他网络都可以看到该服务。

nmap server -p 5432

幸运的是,我想起来之前曾经尝试通过我的Mikrotik路由器将内部Postgres服务器暴露给外部世界。 不知何故,它有效地关闭了内部网络的外部5432端口。 当我删除所有带有5432端口的NAT规则后,它就像魔法般地正常工作了。


0
如果你使用的是Windows系统,我会打开任务管理器,并启动postgres服务,然后就可以连接到数据库了。 Windows任务管理器

0
我曾经遇到过这样的问题,需要通过ssh登录到服务器,然后在psql控制台中运行查询脚本。但每次都会出现“psql未找到”的错误提示。解决方法是将从cat .bash_profile获取的bin路径下的psql完整路径添加到脚本中即可。
PATH=$PATH:/usr/local/pgsql/bin:/usr/local/mysql/bin

所以我添加了整个 /usr/local/mysql/bin/psql 而不仅仅是 psql 以进行远程执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接