无法连接到 PostgreSQL

15 阅读3分钟

无法连接到 PostgreSQL

摘要: 本故障排除指南解决了 PostgreSQL 中常见的连接问题,涵盖 listen_addresses 配置、端口可访问性、psql 使用以及如何解读常见错误消息。

原文链接

这真让人沮丧……你已经花了一整天的大部分时间在这上面,却还是搞不定。你已经测试过 Postgres 正在运行,并且你尝试连接的端口是正确的,你也检查了好几次主机,但仍然无法连接到 Postgres!

我不会给你全面回顾所有可能的原因,因为原因太多了,我敢肯定我会漏掉一些,但这里给你提供一些线索。

通用故障排除流程图

这是一个通用流程图,帮助你找出可能出了什么问题:

Troubleshooting_Postgres.png

以下是关于这些步骤的详细说明:

listen_addresses

默认情况下,Postgres 只监听 127.0.0.1,这意味着你无法从外部访问数据库。这是一项安全功能。你可以监听所有以太网接口(使用 '*'),或者列出你的 IP 地址。

此设置需要重启 Postgres 才能生效。

开放端口

如果你只是远程连接有问题,可能是因为你的 Postgres 主机和你尝试连接的主机之间的端口未开放。如果你不知道如何找出端口是否开放,我写了一篇名为"我的端口开放了吗?"的文章。

使用 psql

psql 是你能找到的最好的 Postgres 客户端。而且,它是官方 Postgres 客户端,随 Postgres 包一起提供。最后,它会给你一个错误消息,解释出了什么问题。

在尝试用你自己的代码、软件或其他任何东西连接之前,先试着用 psql 连接。如果你能连接成功,那么也许问题不在 Postgres! ;-)

阅读错误消息

是的,我知道!你需要阅读错误消息。通常,Postgres 会很好地解释出了什么问题以及你需要做什么来解决它。

以下是一些示例:

FATAL: password authentication failed for user "XXX"

这只是意味着你的密码不对。再试着用正确的密码,以防万一……

password file "XXX" has group or world access; permissions should be u=rw (0600) or less

Postgres 拒绝使用你的密码文件,因为它不安全。先把它弄安全了再用!

FATAL: Peer authentication failed for user "XXX"

你肯定是把 pg_hba.conf 文件搞乱了。如果你不知道自己在做什么,阅读这个文档页面可能会是个好主意!

Is the server running locally and accepting connections on Unix domain socket "XXX/.s.PGSQL.PPP"?

你尝试了一个 Unix socket 连接,但看起来你的 Postgres 实例没有监听那个端口(PPP)…… 两种解决方法:Postgres 没有运行,或者你用了错误的端口号。

Is the server running on host "XXX" and accepting TCP/IP connections on port 5433

你尝试连接到主机 XXX 的 5433 端口。你确定你的主机和端口是正确的吗?如果是,你的 Postgres 实例在运行吗?