Postgresql启动无监听端口问题的解决

问题

在初始化msfdb时,报错postgresql无法连接。具体错误如下:

msf > msfdb init

\* exec: msfdb init

i Database already started

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory

Is the server running locally and accepting connections on that socket?

尝试

根据报错信息,做了如下尝试:

  1. 查看/var/run/postgresql/目录中有没有.s.PGSQL.5432文件,确实没有,查看权限是postgres的读写执行都有,排除权限问题。
  2. 查看配置文件/etc/postgresql/18/main/postgresql.conf,listen_address取消注释,也是不行,排除配置文件问题,因为默认这个配置文件从未改过。
  3. 使用sudo -u postgres service postgresql restart由postgres服务账号重启服务,也是不行,排除服务账号的问题。
  4. 查看配置文件中socket的路径确实是/var/run/postgresql/,排除socket默认路径问题。

根本原因

不断地尝试service stop,start,都是显示服务activate已启动,但ss -tuln查看仍然没有5432的监听端口。ps aux | grep postgres 也没发现进程。说明问题出在这里。

存在一个集群环境,且状态为down,没有启动。由于没有存活的集群,自然就不会有 postgres 进程监听 5432 端口,也就不会有 Unix socket 文件。

而service postgresql start 的职责是"按配置尝试启动所有已创建的数据库集群",即使某个集群启动失败,服务状态也可能显示为 active (exited),因为启动脚本本身执行完成了。相当于PostgreSQL 的"服务壳"启动成功,但数据库实例(集群)并未真正运行。

一句话总结:PostgreSQL 的总控服务显示启动成功,但底层的数据库实例没有运行,导致端口和 socket 缺失,因而 msfdb 无法连接。

解决

手动使用 pg_ctlcluster 启动集群后,PostgreSQL 真正开始工作,问题解决。

查看集群,正常。

查看进程和监听端口,正常。

查看socket文件,已创建。

查看具体的数据库实例,运行中。

让我们不断学习,保持好奇和兴趣!

Iain

相关推荐
倒流时光三十年3 小时前
PostgreSQL Semi-Join(半连接)通俗讲解
数据库·postgresql
IvorySQL7 小时前
PostgreSQL 日报| RI 快速路径并发读取缺陷(8 月 13 日)
数据库·postgresql
一只fish1 天前
优化器架构对比:Oracle vs PostgreSQL vs MySQL
mysql·postgresql·oracle
ClouGence1 天前
PostgreSQL 同步到 Iceberg:开源、私有部署与 SaaS 方案对比
数据库·postgresql·开源
l1t1 天前
DeepSeek总结的在 pg_stat_statements 中诊断高基数工作负载
数据库·缓存·postgresql
测试运维日常笔记1 天前
PostgreSQL 数据库磁盘空间占用排查手顺
数据库·postgresql·oracle
IvorySQL2 天前
PostgreSQL 日报|PG18.5 回归测试崩溃问题(8 月 12 日)
大数据·数据库·人工智能·postgresql
叶 落2 天前
Ubuntu24 安装 PostgreSQL
数据库·postgresql·安装教程
copyer_xyf3 天前
Agentic RAG 实战:PostgreSQL + LangGraph 一条链路
python·postgresql·agent
jnrjian3 天前
EDB PEM 安装加强 curl
postgresql