PostgreSQL 14.7并行工作进程崩溃求助:异常0xC0000022(Windows Server 2012 R2)
PostgreSQL 14.7在Windows Server 2012 R2上并行工作进程权限拒绝崩溃问题
问题详情
生产环境使用PostgreSQL 14.7时发生崩溃,数据库自动进入恢复模式,pg_log中捕获到关键日志:
"background worker ""parallel worker"" (PID 8008) was terminated by exception 0xC0000022",,"See C include file ""ntstatus.h"" for a description of the hexadecimal value.",,,,,,,"","postmaster",,0
环境参数
- 数据库版本:PostgreSQL 14.7
- 操作系统:Windows Server 2012 R2
异常对应定义
该异常为Windows系统的权限拒绝错误,对应NT状态码定义:
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
用户案例与相关情况
确实有其他PostgreSQL用户在Windows环境下碰到过一模一样的问题,常见的触发原因包括:
- 文件目录权限不足:并行工作进程尝试访问
PGDATA目录下的pg_wal、pg_temp等子目录,或是系统临时文件目录时,PostgreSQL服务运行账号没有足够的读写权限,导致操作被拒绝。 - 安全软件拦截:杀毒软件、防火墙或终端防护工具可能误判并行工作进程的文件操作行为,直接拦截并触发权限拒绝异常。
- 服务账号权限变更:PostgreSQL服务运行的账号权限被修改,丢失了创建子进程、访问系统特定资源的必要权限,引发并行工作进程启动或运行失败。
- 版本适配问题:PostgreSQL 14.7在Windows Server 2012 R2上存在少量并行工作进程权限处理的适配问题,部分用户升级到14.x后续小版本(如14.8及以上)后解决了该崩溃问题。
内容的提问来源于stack exchange,提问作者user3323627
相关产品推荐
相关产品推荐

