无法连接到端口 5432 上的 Postgresql
Can't connect to Postgresql on port 5432
我在服务器 运行ning Ubuntu Server 14.04.
上安装了 PostgreSQL 9.3
如果我通过终端 ssh 进入服务器,我可以连接到 psql。但是当我尝试配置 pgAdmin III 进行远程连接时,我得到:
Server doesn't listen The server doesn't accept connections: the
connection library reports could not connect to server: Connection
refused Is the server running on host "172.24.3.147" and accepting
TCP/IP connections on port 5432?
当我 运行 在服务器 service postgresql status
上时,它给我:
9.3/main (port 5432): online
所以我当然遗漏了一些重要的东西。
编辑
当在服务器上 运行ning netstat -na
时,我得到(相关部分,我猜):
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 172.24.3.147:22 172.24.3.240:61950 ESTABLISHED
tcp 0 0 172.24.3.147:22 172.24.3.240:60214 ESTABLISHED
您可能需要打开端口以在您的局域网(或局域网外)访问它,或者将网络地址绑定到该端口(让 PostgreSQL 在您的局域网上侦听,而不仅仅是在本地主机上侦听)
您必须编辑 postgresql.conf 文件并将行更改为 'listen_addresses'。
您可以在 /etc/postgresql/9.3/main
目录中找到此文件。
默认Ubuntu配置只允许本地主机(或127.0.0.1)接口,当每个PostgreSQL客户端在同一台计算机上作为PostgreSQL服务器工作时,这足以使用。如果你想从其他计算机连接 PostgreSQL 服务器,你可以这样更改此配置行:
listen_addresses = '*'
那么你也编辑了pg_hba.conf文件。在此文件中,您已设置可以从哪些计算机连接到此服务器以及可以使用哪种身份验证方法。通常你需要类似的行:
host all all 192.168.1.0/24 md5
请阅读此文件中的评论...
编辑:
编辑 postgresql.conf 和 pg_hba.conf 后,您必须重新启动 postgresql 服务器。
EDIT2:突出显示配置文件。
通过命令行连接的 psql 和 pgAdmin 没有在 RDS 上与 AWS 连接时遇到同样的问题。我确实将我的 RDS 设置为可公开访问。我确保我的 ACL 和安全组是完全开放的,但仍然存在问题,所以我执行了以下操作:
sudo find . -name *.conf
然后 sudo nano ./data/pg_hba.conf
然后添加到 pg_hba.conf 文件 host all all 0.0.0.0/0 md5
中的指令顶部
pgAdmin 自动让我登录。
这也适用于 pg_hba.conf 文件
host all all md5
没有任何 IP 地址,这也适用于我的 IP 地址 host all all <myip>/32 md5
附带说明一下,我的 RDS 在我的默认 VPC 中。我在我的非默认 VPC 中有一个相同的 RDS 实例,具有与我的默认 VPC 相同的安全组、ACL 和安全组设置,但我无法让它工作。不知道为什么,但那是另一天。
记得还要检查防火墙设置。在检查并仔细检查了我的 pg_hba.conf
和 postgres.conf
文件后,我终于发现我的防火墙覆盖了所有内容,因此阻止了连接
我在MacOS系统升级后遇到了同样的问题。通过用 brew 升级 postgres 解决了这个问题。
详细信息:看起来系统正在尝试使用较旧的 Postgres 10 设置访问 Postgres 11。我确定这是我过去某个地方的错误,但幸运的是,通过上面的升级,一切都得到了解决。
Uncomment the listen_addresses = '*' in the postgresql.conf
这已经是我第二次遇到麻烦了,所以我认为可能值得一提。 postgresql.conf 中的 listen_addresses = '*' 行默认被注释。更新后一定要取消注释(去掉井号,#开头)否则远程连接会继续被阻塞
PS: psql -U postgres -c 'SHOW config_file'
- 定位postgresql.conf文件路径
我遇到了同样的问题。我最初安装的是版本 10,因为这是 Ubuntu 18.04 的默认安装。我后来升级到 13.2 因为我想要最新版本。我进行了所有配置修改,但它仍然只是绑定到 1207.0.0.1 然后我想 - 也许它正在查看版本 10 的配置文件。我修改了这些文件并重新启动了 postgres 服务。答对了!它绑定到 0.0.0.0
我需要完全删除 10 并确保在 13.2 版本下强制服务 运行,因此如果您从另一个版本升级,请尝试更新该旧目录中的其他配置文件。
我使用自制软件来启动我的服务器。
1)停止服务器(但它不工作。这是问题所在)
brew 服务停止 postgresql
2) 如有需要请进行更新
brew postgresql-upgrade-database
3) 下面的评论解决了我启动服务器的问题。就是这样
brew 服务启动 postgresql
如果首先发生错误,您必须首先阅读日志。
- 这仅适用于通过 brew 在 mac *
上安装 postgresql
首先,您必须通过 运行ning
检查 postgresql 状态
brew services
在您的终端上
如果它停止了,请尝试启动它,然后 运行 再次 brew services
如果状态显示错误,您可以通过 *.plist 文件轻松找到日志位置。
示例,在我的配置中
cat /Users/drosanda/Library/LaunchAgents/homebrew.mxcl.postgresql@12.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.postgresql@12</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/postgresql@12/bin/postgres</string>
<string>-D</string>
<string>/usr/local/var/postgresql@12</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/postgresql@12.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/postgresql@12.log</string>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
日志文件内容如下:
2021-11-30 09:07:20.154 WIB [3891] FATAL: lock file "postmaster.pid" already exists
2021-11-30 09:07:20.154 WIB [3891] HINT: Is another postmaster (PID 422) running in data directory "/usr/local/var/postgresql@12"?
对于我的情况,由于 PID 文件仍然存在,postgresql 无法启动。
很容易修复,删除 postmaster.pid
文件即可。
只需添加一个可能对以后的人有用的答案。
只是已接受答案的摘要
如果有人像我一样忽略了必须编辑的文件名
在我的例子中,conf 文件位于
/etc/postgresql/14/main'
如果您键入 cd /etc/postgresql/14/main
所以只需 sudo nano
添加这 2 个文件名
- postgresql.conf
listen_addresses = '*'
取消注释此行并将 localhost 更改为 *
- pg_hba.conf
host all all 0.0.0.0/0
将127.0.0.1/32改成0.0.0.0/0
最后不要忘记使用 sudo service postgresql restart
重新启动
我希望这个能清除通知错误
windows === press WIN + R //open services
type - services.msc
find postgres - double click on it.
properties box open then click on start
enjoy.
您必须编辑 pg_hba.conf
以接受网络内的所有请求
#TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
在您的应用程序中,您可以使用此 IP 地址进行连接,如下例所示:-
postgresql://postgres:******@192.168.1.101:5432/app
为另一种可能性添加更新的答案。 运行 AWS EC2 上的 postgres 10 我必须通过 Windows Defender 防火墙添加自定义入站规则以允许端口 5432。
对于来自 docker 的任何其他人和其他应用程序问题,如节点 js 或 Django 或任何东西
我遇到这个问题 2 天或更长时间观看视频教程似乎没有任何效果,虽然我说我错过了一些,但这是对我有用的解决方案
代替 PGHOST 的本地主机
您必须指定您的服务名称
例如
image: postgres
container_name: postgresdb
restart: always
env_file:
- ./env/.env
volumes:
那么您的主机必须是
PGHOST:nodeapp-db
我在服务器 运行ning Ubuntu Server 14.04.
上安装了 PostgreSQL 9.3如果我通过终端 ssh 进入服务器,我可以连接到 psql。但是当我尝试配置 pgAdmin III 进行远程连接时,我得到:
Server doesn't listen The server doesn't accept connections: the connection library reports could not connect to server: Connection refused Is the server running on host "172.24.3.147" and accepting TCP/IP connections on port 5432?
当我 运行 在服务器 service postgresql status
上时,它给我:
9.3/main (port 5432): online
所以我当然遗漏了一些重要的东西。
编辑
当在服务器上 运行ning netstat -na
时,我得到(相关部分,我猜):
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 172.24.3.147:22 172.24.3.240:61950 ESTABLISHED
tcp 0 0 172.24.3.147:22 172.24.3.240:60214 ESTABLISHED
您可能需要打开端口以在您的局域网(或局域网外)访问它,或者将网络地址绑定到该端口(让 PostgreSQL 在您的局域网上侦听,而不仅仅是在本地主机上侦听)
您必须编辑 postgresql.conf 文件并将行更改为 'listen_addresses'。
您可以在 /etc/postgresql/9.3/main
目录中找到此文件。
默认Ubuntu配置只允许本地主机(或127.0.0.1)接口,当每个PostgreSQL客户端在同一台计算机上作为PostgreSQL服务器工作时,这足以使用。如果你想从其他计算机连接 PostgreSQL 服务器,你可以这样更改此配置行:
listen_addresses = '*'
那么你也编辑了pg_hba.conf文件。在此文件中,您已设置可以从哪些计算机连接到此服务器以及可以使用哪种身份验证方法。通常你需要类似的行:
host all all 192.168.1.0/24 md5
请阅读此文件中的评论...
编辑:
编辑 postgresql.conf 和 pg_hba.conf 后,您必须重新启动 postgresql 服务器。
EDIT2:突出显示配置文件。
通过命令行连接的 psql 和 pgAdmin 没有在 RDS 上与 AWS 连接时遇到同样的问题。我确实将我的 RDS 设置为可公开访问。我确保我的 ACL 和安全组是完全开放的,但仍然存在问题,所以我执行了以下操作:
sudo find . -name *.conf
然后 sudo nano ./data/pg_hba.conf
然后添加到 pg_hba.conf 文件 host all all 0.0.0.0/0 md5
中的指令顶部
pgAdmin 自动让我登录。
这也适用于 pg_hba.conf 文件
host all all md5
没有任何 IP 地址,这也适用于我的 IP 地址 host all all <myip>/32 md5
附带说明一下,我的 RDS 在我的默认 VPC 中。我在我的非默认 VPC 中有一个相同的 RDS 实例,具有与我的默认 VPC 相同的安全组、ACL 和安全组设置,但我无法让它工作。不知道为什么,但那是另一天。
记得还要检查防火墙设置。在检查并仔细检查了我的 pg_hba.conf
和 postgres.conf
文件后,我终于发现我的防火墙覆盖了所有内容,因此阻止了连接
我在MacOS系统升级后遇到了同样的问题。通过用 brew 升级 postgres 解决了这个问题。 详细信息:看起来系统正在尝试使用较旧的 Postgres 10 设置访问 Postgres 11。我确定这是我过去某个地方的错误,但幸运的是,通过上面的升级,一切都得到了解决。
Uncomment the listen_addresses = '*' in the postgresql.conf
这已经是我第二次遇到麻烦了,所以我认为可能值得一提。 postgresql.conf 中的 listen_addresses = '*' 行默认被注释。更新后一定要取消注释(去掉井号,#开头)否则远程连接会继续被阻塞
PS: psql -U postgres -c 'SHOW config_file'
- 定位postgresql.conf文件路径
我遇到了同样的问题。我最初安装的是版本 10,因为这是 Ubuntu 18.04 的默认安装。我后来升级到 13.2 因为我想要最新版本。我进行了所有配置修改,但它仍然只是绑定到 1207.0.0.1 然后我想 - 也许它正在查看版本 10 的配置文件。我修改了这些文件并重新启动了 postgres 服务。答对了!它绑定到 0.0.0.0
我需要完全删除 10 并确保在 13.2 版本下强制服务 运行,因此如果您从另一个版本升级,请尝试更新该旧目录中的其他配置文件。
我使用自制软件来启动我的服务器。
1)停止服务器(但它不工作。这是问题所在)
brew 服务停止 postgresql
2) 如有需要请进行更新
brew postgresql-upgrade-database
3) 下面的评论解决了我启动服务器的问题。就是这样
brew 服务启动 postgresql
如果首先发生错误,您必须首先阅读日志。
- 这仅适用于通过 brew 在 mac * 上安装 postgresql
首先,您必须通过 运行ning
检查 postgresql 状态brew services
在您的终端上
如果它停止了,请尝试启动它,然后 运行 再次 brew services
如果状态显示错误,您可以通过 *.plist 文件轻松找到日志位置。
示例,在我的配置中
cat /Users/drosanda/Library/LaunchAgents/homebrew.mxcl.postgresql@12.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.postgresql@12</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/postgresql@12/bin/postgres</string>
<string>-D</string>
<string>/usr/local/var/postgresql@12</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/postgresql@12.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/postgresql@12.log</string>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
日志文件内容如下:
2021-11-30 09:07:20.154 WIB [3891] FATAL: lock file "postmaster.pid" already exists
2021-11-30 09:07:20.154 WIB [3891] HINT: Is another postmaster (PID 422) running in data directory "/usr/local/var/postgresql@12"?
对于我的情况,由于 PID 文件仍然存在,postgresql 无法启动。
很容易修复,删除 postmaster.pid
文件即可。
只需添加一个可能对以后的人有用的答案。
只是已接受答案的摘要
如果有人像我一样忽略了必须编辑的文件名
在我的例子中,conf 文件位于
/etc/postgresql/14/main'
如果您键入 cd /etc/postgresql/14/main
所以只需 sudo nano
添加这 2 个文件名
- postgresql.conf
listen_addresses = '*'
取消注释此行并将 localhost 更改为 *
- pg_hba.conf
host all all 0.0.0.0/0
将127.0.0.1/32改成0.0.0.0/0
最后不要忘记使用 sudo service postgresql restart
我希望这个能清除通知错误
windows === press WIN + R //open services type - services.msc
find postgres - double click on it.properties box open then click on start enjoy.
您必须编辑 pg_hba.conf
以接受网络内的所有请求
#TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
在您的应用程序中,您可以使用此 IP 地址进行连接,如下例所示:-
postgresql://postgres:******@192.168.1.101:5432/app
为另一种可能性添加更新的答案。 运行 AWS EC2 上的 postgres 10 我必须通过 Windows Defender 防火墙添加自定义入站规则以允许端口 5432。
对于来自 docker 的任何其他人和其他应用程序问题,如节点 js 或 Django 或任何东西
我遇到这个问题 2 天或更长时间观看视频教程似乎没有任何效果,虽然我说我错过了一些,但这是对我有用的解决方案
代替 PGHOST 的本地主机
您必须指定您的服务名称
例如
image: postgres
container_name: postgresdb
restart: always
env_file:
- ./env/.env
volumes:
那么您的主机必须是 PGHOST:nodeapp-db