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

Poo*_*ony 38 postgresql ubuntu psql centos7

我正在尝试使用以下命令连接到远程服务器中安装的postgres数据库:

psql -h host_ip-U db_username-ddb_name

发生以下错误:

psql:无法连接到服务器:连接被拒绝服务器是否在主机""上运行并接受端口5432上的TCP/IP连接?

  1. Postgres安装的版本是9.4.
  2. 主机操作系统:Ubuntu 15.04
  3. 客户端操作系统:Centos 7

我已经尝试了以下但问题仍未解决:

  1. 编辑pg_hba.conf文件包含

主持所有0.0.0.0/0 md5

  1. 编辑'postgresql.conf'并将listen参数更改为

的listen_addresses = '*'

  1. 重新启动postgres服务.
  2. 在主机和客户端上禁用防火墙和iptables.
  3. 我通过在本地运行psql命令来检查它是否有效.
  4. 我尝试了这个问题中给出的第二个解决方案.跑步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

我错过了什么.希望有人能提供帮助.

Tha*_*eem 83

cd /etc/postgresql/9.x/main/
Run Code Online (Sandbox Code Playgroud)

打开文件命名 postgresql.conf

sudo vi postgresql.conf
Run Code Online (Sandbox Code Playgroud)

将此行添加到该文件

listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

然后打开文件命名 pg_hba.conf

sudo vi pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

并将此行添加到该文件

host  all  all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

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

重启你的服务器

sudo /etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)

  • 嗨,没有在UBUNTU 16 LTS上使用pg9.5 ...你有一个完整的`pg_hba.conf`和`postgresql.conf`脚本适应这个env和权限吗?我需要使用`PGPASSWORD = postgres psql -U postgres`. (10认同)

小智 18

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


ahe*_*rog 8

在尝试远程连接到我的 Raspberry Pi 上的新 PostgreSQL 安装时,我一直在努力解决这个问题。以下是我为解决此问题所做的工作的完整细分:

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

sudo [editor] /etc/postgresql/[version]/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

我使用了nano,但您可以使用您选择的编辑器,虽然我安装了版本9.1,但该目录将适用于您安装的任何版本。

向下搜索到标题为“连接和身份验证”的部分。第一个设置应该是'listen_addresses',并且可能如下所示:

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
Run Code Online (Sandbox Code Playgroud)

右边的注释对如何更改此字段给出了很好的说明,使用'*'为所有人建议的方法会很好地工作。

请注意,此字段用# 注释掉。根据评论,它将默认为“localhost”,因此仅将值更改为'*'是不够的,您还需要通过删除前导#.

它现在应该是这样的:

listen_addresses = '*'         # what IP address(es) to listen on;
Run Code Online (Sandbox Code Playgroud)

您还可以检查下一个设置“端口”,以确保您正确连接。5432 是默认的,如果你不指定,它是 psql 将尝试连接的端口。

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

sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

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

host all all all md5
Run Code Online (Sandbox Code Playgroud)

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

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

host [database_name] pi 192.168.1.0/24 md5
Run Code Online (Sandbox Code Playgroud)

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

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

sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)

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

sudo netstat -ltpn
Run Code Online (Sandbox Code Playgroud)

如果您不以提升的方式运行它(使用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]
Run Code Online (Sandbox Code Playgroud)


小智 8

配置完成后,需要设置:

要打开端口 5432,请编辑/etc/postgresql/9.1/main/postgresql.conf并更改

# Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
Run Code Online (Sandbox Code Playgroud)

在 /etc/postgresql/10/main/pg_hba.conf 中

# IPv4 local connections:
host    all             all             0.0.0.0/0           md5
Run Code Online (Sandbox Code Playgroud)

现在重新启动您的 DBMS

sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)

现在您可以连接

psql -h hostname(IP) -p port -U username -d database
Run Code Online (Sandbox Code Playgroud)


Ami*_*rio 7

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

vim /etc/postgresql/x.x/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

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

tail /var/log/postgresql/postgresql-x.x-main.log
Run Code Online (Sandbox Code Playgroud)


Har*_*ore 7

第1步:编辑文件potgresql.conf

  • 文件位置应该是:etc/postgresql/10/main/

  • 寻找:

    #Connection Settings -

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

  • 删除#之前监听的地址

  • 添加'*'

    listen_addresses = '*'


第2步:编辑文件pg_hba.conf

  • 文件位置应该是:etc/postgresql/10/main/

  • 在末尾添加下面给定的行

    host all all 0.0.0.0/0 md5


第三步:重启postgres服务器

sudo /etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)

第四步:检查postgres服务器状态

sudo netstat -plunt |grep postgres
Run Code Online (Sandbox Code Playgroud)
  • 确保您使用相同的端口来访问数据库