我在运行 Ubuntu Server 14.04 的服务器上安装了 PostgreSQL 9.3。
如果我通过终端 ssh 进入服务器,我可以连接 psql。但是当我尝试配置 pgAdmin III 进行远程连接时,我得到:
服务器不监听 服务器不接受连接:连接库报告无法连接到服务器:连接被拒绝 服务器是否在主机“172.24.3.147”上运行并接受端口 5432 上的 TCP/IP 连接?
当我在服务器 service postgresql status
上运行时,它给了我:
9.3/main (port 5432): online
所以我当然在这里遗漏了一些重要的东西。
编辑
在服务器上运行 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.conf 文件并使用“listen_addresses”更改行。
您可以在 /etc/postgresql/9.3/main
目录中找到此文件。
默认的 Ubuntu 配置只允许 localhost(或 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:突出显示的配置文件。
取消注释 postgresql.conf 中的 listen_addresses = '*'
这已经咬了我第二次,所以我认为可能值得一提。 postgresql.conf 中的 listen_addresses = '*' 行默认是注释的。更新后一定要取消注释(去掉井号,#开头),否则远程连接会继续被阻塞。
PS:psql -U postgres -c 'SHOW config_file'
- 定位 postgresql.conf 文件路径
通过命令行连接的 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 自动让我登录。
这也适用于没有任何 IP 地址的 pg_hba.conf 文件 host all all md5
,这也适用于我的 IP 地址 host all all <myip>/32 md5
附带说明一下,我的 RDS 在我的默认 VPC 中。我的非默认 VPC 中有一个相同的 RDS 实例,其安全组、ACL 和安全组设置与我的默认 VPC 相同,但我无法让它工作。不知道为什么,但那是另一天。
记得检查防火墙设置。在检查并仔细检查了我的 pg_hba.conf
和 postgres.conf
文件后,我终于发现我的防火墙覆盖了所有内容,因此阻止了连接
只是从接受的答案中总结
如果像我这样的人忽略了必须编辑的文件名
在我的情况下,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
重新启动
我希望这个清除通知错误
您必须编辑 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
您可能需要打开端口以在您的 LAN(或外部)中访问它或将网络地址绑定到端口(让 PostgreSQL 在您的 LAN 上侦听,而不仅仅是在 localhost 上)
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
此行显示 Postgre 仅侦听来自运行 postgre 的同一台计算机的连接,而不是来自本地网络的连接。
MacOS系统升级后我遇到了同样的问题。通过用 brew 升级 postgres 解决了这个问题。详细信息:系统似乎正在尝试使用较旧的 Postgres 10 设置访问 Postgres 11。我确定这是我过去某个地方的错误,但幸运的是,通过上面的升级,这一切都得到了解决。
我有同样的问题。我最初安装的是版本 10,因为那是 Ubuntu 18.04 的默认安装。我后来升级到 13.2 因为我想要最新版本。我做了所有的配置修改,但它仍然只是 1207.0.0.1 然后我想 - 也许它正在查看版本 10 的配置文件。我修改了这些并重新启动了 postgres 服务。答对了!它绑定到 0.0.0.0
我需要完全删除 10 并确保我强制服务在 13.2 版本下运行,因此如果您从另一个版本升级,请尝试更新该旧目录中的其他配置文件。
我使用自制软件来启动我的服务器。
1)停止服务器(但它不工作。这是问题)
酿造服务停止 postgresql
2)如果需要进行更新
brew postgresql-升级数据库
3)下面的评论解决了我启动服务器的问题。而已
brew 服务启动 postgresql
如果首先发生错误,您必须阅读日志。
这仅适用于通过 mac 上的 brew 安装 postgresql *
首先,您必须通过运行检查 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
文件很容易修复。
只需添加一个以后可能对某人有用的答案。
windows === 按WIN + R //打开服务类型-services.msc 找到postgres-双击它。属性框打开然后点击开始享受。
为另一种可能性添加更新的答案。在 AWS EC2 上运行 postgres 10 我必须通过 Windows Defender 防火墙添加自定义入站规则以允许端口 5432。
对于来自 docker 和其他应用程序问题的任何其他人,如 node js 或 Django 或任何其他问题
我面临这个问题 2 天或更长时间观看视频教程似乎没有任何工作虽然我说我错过了一些但这里是对我有用的解决方案
而不是 PGHOST 的本地主机
您必须指定您的服务名称
例如
image: postgres
container_name: postgresdb
restart: always
env_file:
- ./env/.env
volumes:
那么你的主机必须是 PGHOST:nodeapp-db
有同样的问题,搜索导致许多复杂的过度解决方案。最终这个问题是在 Ubuntu 上安装 Postgres 后没有设置密码。
解决方案:
从 Postgres 终端 - 通过输入“sudo -u postgres psql”进入,这将导致“postgres=#”... 使用“\password postgres”设置密码 使用新密码和用户名“postgres”更新 PG Admin
参考 https://www.cherryservers.com/blog/how-to-install-and-setup-postgresql-server-on-ubuntu-20-04。