ChatGPT解决这个技术问题 Extra ChatGPT

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

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

psql -h host_ip -U db_username -d db_name

这是发生的错误:

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

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

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

编辑 pg_hba.conf 文件以包含

托管所有所有 0.0.0.0/0 md5

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

听地址='*'

重新启动 Postgres 服务。在主机和客户端上禁用防火墙和 iptables。我通过在本地运行 psql 命令进行了检查,它工作正常。我尝试了这个问题中给出的第二个解决方案。运行 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 我通过运行 sudo ufw disable 禁用了 iptables,但我仍然遇到同样的错误。
你可以试试 'netstat -na|grep 5432' 看看 postgresql 是否绑定到所有接口?
只有这句话节省了我花费大量时间托管所有 0.0.0.0/0 md5

C
Community
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

嗨,没有在 UBUNTU 16 LTS 和 pg9.5 上工作......你有一个完整的 pg_hba.confpostgresql.conf 脚本适应这个环境和权限吗?我需要使用 PGPASSWORD=postgres psql -U postgres
@PeterKrauss我正面临这个问题。它不适用于带有 pg9.5 的 UBUNTU 16 LTS。它对你有用吗?
抱歉@Arpit,2017 年......今天(接近 2020 年)最好的解决方案是将 UBUNTU 升级到 18 LTS,将 PostgreSQL 升级到 v11+。
@PeterKrauss 感谢您的回复。高度赞赏!
从 Ubuntu 14 升级到 Ubuntu 16 后,我收到此错误。简单地重新启动 postgresql 对我有用。谢谢!
c
cchapman

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


只是想补充一点,这也发生在我在 Postgres 11 中的 postgresql.conf 上...从不介意检查 postgresql.conf,但只需将其修复为 5432。
它也发生在我身上,Postgres 12。
奇怪的是,我在安装程序菜单中选择了 5432,它就是 5433。所以它会影响新版本而不是旧版本
a
aherocalledFrog

尝试远程连接到我的 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;

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

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

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

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

host all all all md5

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

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

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]

A
Amirio

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

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

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

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

谢谢@amirio,这是找到确切问题的正确方法。就我而言,存在与文件权限相关的问题 2019-05-20 19:53:45.406 IST [4843] FATAL: data directory "/var/lib/postgresql/9.5/main" has group or world access 2019-05-20 19:53:45.406 IST [4843] DETAIL: Permissions should be u=rwx (0700).
非常感谢您在检查 mu 日志后看到我必须将 (0700) 提供给我的 /var/lib/10/main 目录,它对我有用
S
Sankar Martha

以下配置,您需要设置:

要打开端口 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

[在 aws ec2] 我还必须编辑入站端口,以接受 5432 上的流量。
J
Jon

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

brew install postgres

这将告诉您是否已经安装它以及什么版本或为您安装最新版本,如果没有然后运行

brew upgrade postgresql

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

brew services start postgresql

这将再次启动服务。我希望这可以帮助别人。


H
Harshal Deore

第 1 步:编辑文件potgresql.conf

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

查找:#Connection Settings - #listen_addresses = '' # 要监听的 IP 地址;

删除监听地址前的#

添加'*':listen_addresses = '*'

第 2 步:编辑文件pg_hba.conf

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

在最终主机的给定行下方添加所有 0.0.0.0/0 md5

第三步:重启postgres服务器

sudo /etc/init.d/postgresql restart

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

sudo netstat -plunt |grep postgres

确保您使用相同的端口来访问数据库


M
Mohanavel T

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

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


M
Meshack Mbuvi

以下对我在 macos Mojave 上的帮助:

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

K
Kabir Ahmadi

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


N
Neue Haas Grotesk

就我而言,我删除了一个语言环境并生成了另一个语言环境。由于 postgresql.conf 文件中的“lc_messages”、“lc_monetary”、“lc_numberic”和“lc_time”上的致命错误,数据库无法打开。

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


C
CSZQ

另一种情况,postgresql.conf并且pg_hba.conf文件不在 /etc/postgresql/9.1/main/。因为 postgres 可以从您设置的任何位置开始。

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


n
new2cpp

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


A
Archimondain

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


D
David Buck

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


s
shailesh_op

我遇到了这样的问题,我必须 ssh 进入服务器,然后在 psql 控制台中运行查询,所以查询在脚本中,但每次我收到此错误 psql not found 所以我所做的只是添加了 psql 完整路径我们从 cat .bash_profile 得到的 bin 并完成了

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和这些东西


A
Aman Sheikh

对我来说,我刚刚删除了位于服务器下 pgAdmin4 GUI 界面左侧的现有 PostgreSQL 14 服务器,然后我从 pgAdmin4 的快速链接中的选项手动添加了新服务器。

我遵循了 bitnami.com 的文档

details for adding new server


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅