Skip to content

macos系统下pgsql开启再关闭再开启会失败 #548

@TonyHexin

Description

@TonyHexin

问题描述

在 macOS 系统下,PostgreSQL 服务执行「启动→关闭→再次启动」操作时,大概率会启动失败,提示 pg_ctl: 无法启动服务器进程检查日志输出;但紧接着再次执行启动命令,服务又能正常启动。

环境信息

  • 操作系统:macOS 15.7 (aarch64)
  • PostgreSQL 版本:18.1 (Homebrew 安装)
  • 编译信息:aarch64-apple-darwin24.6.0, Apple clang version 17.0.0 (clang-1700.6.3.2), 64-bit
  • 数据目录:/Users/tony/Library/PhpWebStudy/server/postgresql/postgresql18

复现步骤

  1. 启动 PostgreSQL 服务:pg_ctl start -D [数据目录]
  2. 关闭 PostgreSQL 服务:pg_ctl stop -D [数据目录]
  3. 立即再次执行启动命令,大概率出现启动失败;
  4. 再次执行启动命令,服务可正常启动。

错误提示

Error: pg_ctl: 无法启动服务器进程检查日志输出.

关键日志

2026-02-15 18:28:27.038 CST [73631] 日志: 正在启动 PostgreSQL 18.1 (Homebrew) on aarch64-apple-darwin24.6.0, compiled by Apple clang version 17.0.0 (clang-1700.6.3.2), 64-bit
2026-02-15 18:28:27.040 CST [73631] 日志: 正在监听IPv6地址"::1",端口 5432
2026-02-15 18:28:27.040 CST [73631] 日志: 正在监听IPv4地址"127.0.0.1",端口 5432
2026-02-15 18:28:27.040 CST [73631] 日志: 在Unix套接字 "/tmp/.s.PGSQL.5432"上侦听
2026-02-15 18:28:27.044 CST [73648] 日志: 数据库系统中断;上一次的启动时间是在2026-02-07 20:55:16 CST
2026-02-15 18:28:27.083 CST [73648] 日志: 数据库系统没有正确的关闭; 处于自动恢复状态中
2026-02-15 18:28:27.084 CST [73648] 日志: redo 在 0/17DEF20 开始
2026-02-15 18:28:27.084 CST [73648] 日志: invalid record length at 0/17DEF58: expected at least 24, got 0
2026-02-15 18:28:27.084 CST [73648] 日志: redo done at 0/17DEF20 system usage: CPU:用户:0.00 s,系统:0.00 s,已用时间:0.00 s
2026-02-15 18:28:27.086 CST [73646] 日志: checkpoint starting: end-of-recovery immediate wait
2026-02-15 18:28:27.087 CST [73646] 日志: checkpoint complete: wrote 0 buffers (0.0%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.002 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB; lsn=0/17DEF58, redo lsn=0/17DEF58
2026-02-15 18:28:27.088 CST [73631] 日志: 数据库系统准备接受连接
2026-02-15 18:28:52.351 CST [74673] 致命错误: 先前存在的共享内存块 (key 15509983, ID 1179648) 仍在使用中
2026-02-15 18:28:52.351 CST [74673] 提示: 终止与数据目录"/Users/tony/Library/PhpWebStudy/server/postgresql/postgresql18"关联的任何旧服务器进程.
2026-02-15 18:28:52.351 CST [74673] 日志: 数据库系统已关闭
2026-02-15 18:29:27.089 CST [73631] 日志: 无法打开文件 "postmaster.pid": No such file or directory
2026-02-15 18:29:27.089 CST [73631] 日志: 由于数据目录锁文件非法而执行立即关闭
2026-02-15 18:29:27.089 CST [73631] 日志: 接收到立即 (immediate) 停止请求
2026-02-15 18:29:27.089 CST [73631] 日志: 无法打开文件 "postmaster.pid": No such file or directory
2026-02-15 18:29:27.094 CST [73631] 日志: 数据库系统已关闭

核心问题指向

从日志中可看到关键错误:先前存在的共享内存块仍在使用中postmaster.pid 文件不存在/非法,推测是服务关闭时共享内存未及时释放、pid 文件清理不彻底导致重启冲突。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions