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

"psql: could not connect to server: Connection refused" Error when connecting to remote database

我正在尝试使用以下命令连接到安装在远程服务器上的 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. 主机操作系统:Ubuntu15.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

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

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

我认为你使用的是机器名而不是主机的 ip。

我在尝试使用机器名称时遇到了同样的错误。因为,只有当客户端和主机都在同一网络下并且它们安装了相同的操作系统时才允许。

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

就我而言,我没有更改管理门户中的 azure 默认安全策略。原来是允许端口22,其余的都被拒绝了。只要我加上5432端口就一切都好了

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

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

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

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

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

首先,打开 PostgreSQL 配置文件并确保该服务将在本地主机之外侦听。

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

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

向下搜索标题为 'Connections and Authentication' 的部分。第一个设置应该是 '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 键而不是 space 键将字段与现有列对齐。

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

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]

以下内容对我在 macos Mojave 上有所帮助:

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

我遇到了完全相同的问题,我的配置文件是正确的。就我而言,问题来自我使用的 Eduroam wifi:当我通过另一个 wifi 连接时,一切正常。似乎 Eduroam 阻塞了端口 5432,至少在我的大学里是这样。

如果你在 Mac 尝试,我的方法非常简单:

brew install postgres

这将告诉您是否已安装它以及安装的版本或为您安装最新版本,如果没有则 运行

brew upgrade postgresql

这将确保您最终安装了最新版本

brew services start postgresql

这将再次启动该服务。我希望这对某人有所帮助。

查看端口并在 postgresql.conf 中进行端口更改。我安装的 postgres 9.4 使用端口 5431 或 5434 而不是 5432。 如果它说端口正在使用中,请更改端口。 并检查您是否在 psql 安装中提供了密码,因此请在文件中提供密码并保存。

在我的例子中,我删除了一个语言环境并生成了另一个语言环境。由于 postgresql.conf 文件中的致命错误,'lc_messages'、'lc_monetary'、'lc_numberic' 和 'lc_time'.

,数据库无法打开

恢复语言环境帮我解决了问题。

尝试迁移您的数据库。例如,如果您使用 Heroku 来托管您的项目并使用 Django,那么请尝试 heroku run python manage.py migrate 命令;错误应该消失了。

如下配置,需要设置:

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

# Connection Settings -

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

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

# IPv4 local connections:
host    all             all             0.0.0.0/0           md5

现在重新启动您的 DBMS

sudo service postgresql restart

现在您可以连接

psql -h hostname(IP) -p port -U username -d database

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

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

我遇到了这样的问题,我不得不通过 ssh 连接到服务器,然后 运行 在 psql 控制台中进行查询,所以查询是在脚本中,但每次我都收到此错误 psql not found 所以我怎么办did 只是添加了我们从 cat 获得的 bin 中的 psql 完整路径。bash_profile 及其 done

PATH=$PATH:/usr/local/pgsql/bin:/usr/local/mysql/bin

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

这里还有一个:
主机和远程都在真实服务器上
你正好需要'*'
'localhost , xxx.xxx.xxx.xxx' 将不起作用。所有这些答案(我看过两个)都应该被抹去。
你不需要的东西:host all all 0.0.0.0/0 md5 和这些东西

第一步:编辑文件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


步骤 3:重启 postgres 服务器

sudo /etc/init.d/postgresql restart

步骤 4:检查 postgres 服务器状态

sudo netstat -plunt |grep postgres
  • 确保您使用相同的端口访问数据库