当前位置: 首页>>技术教程>>正文


“ psql:无法连接到服务器:连接被拒绝”连接到远程数据库时出错

, , ,

问题描述

我正在尝试使用以下命令连接到安装在远程服务器中的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 “” 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

  1. 编辑了’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

我错过了什么吗?希望有人能帮忙。

最佳思路

cd /etc/postgresql/9.x/main/

打开名为postgresql.conf的文件

sudo vi postgresql.conf

将此行添加到该文件

listen_addresses = '*'

然后打开名为pg_hba.conf的文件

sudo vi pg_hba.conf

并将此行添加到该文件

host  all  all 0.0.0.0/0 md5

它允许使用加密密码的所有用户访问所有数据库

重新启动服务器

sudo /etc/init.d/postgresql restart

次佳思路

检查postgresql.conf中定义的端口。我的postgres 9.4安装使用端口5433而不是5432

第三种思路

在尝试远程连接到Raspberry Pi上的新PostgreSQL安装时,我为此感到困惑。这是我为解决此问题所做的全部工作:

首先,打开PostgreSQL配置文件,并确保该服务将在localhost之外进行侦听。

sudo [editor] /etc/postgresql/[version]/main/postgresql.conf

我使用了nano,但是您可以使用自己选择的编辑器,尽管我安装了9.1版本,但是该目录将适合您所安装的版本。

向下搜索标题为“连接和身份验证”的部分。第一个设置应该是'listen_addresses',并且可能看起来像这样:

#listen_addresses = 'localhost'     # what IP address(es) to listen on;

右侧的注释为如何更改此字段提供了很好的说明,并且对所有字段使用建议的'*'都可以很好地工作。

请注意,该字段用#注释掉。根据注释,它将默认为’localhost’,因此仅将值更改为'*'是不够的,您还需要通过删除开头的#取消注释该设置。

现在看起来应该像这样:

listen_addresses = '*'         # what IP address(es) to listen on;

您还可以检查下一个设置’port’,以确保连接正确。默认值为5432,并且是未指定psql尝试连接的端口。

保存并关闭文件,然后打开同一目录中的“客户端身份验证”配置文件:

sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf

如果您想限制访问,我建议您阅读文件,但是对于基本的打开连接,您将跳至文件底部并添加如下一行:

host all all all md5

如果愿意,可以按Tab键而不是空格键以将字段与现有列对齐。

就我个人而言,我改为添加了如下所示的行:

host [database_name] pi 192.168.1.0/24 md5

这将连接限制为仅一个用户和局域网上的一个数据库。

将更改保存到文件后,您将需要重新启动服务以实施更改。

sudo service postgresql restart

现在,您可以使用以下命令检查服务,以确保该服务正在正确的端口上公开侦听:

sudo netstat -ltpn

如果您没有以提升的身份运行它(使用sudo),它不会告诉您在这些端口上侦听的进程的名称。

进程之一应该是Postgres,本地地址应该是开放的(0.0.0.0),而不仅限于本地流量(127.0.0.1)。如果未打开,则需要仔细检查配置文件并重新启动服务。您可以再次确认该服务正在正确的端口上侦听(默认为5432,但您的配置可能有所不同)。

最后,您将能够使用以下命令从远程计算机成功连接:

psql -h [server ip address] -p [port number, optional if 5432] -U [postgres user name] [database name]

第四种思路

确保在配置文件中正确应用了设置。

vim /etc/postgresql/x.x/main/postgresql.conf

尝试以下操作以查看日志并查找问题。

tail /var/log/postgresql/postgresql-x.x-main.log

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7626.html,未经允许,请勿转载。