↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 状态码 / Class 58 系统错误(PostgreSQL自身以外的错误)

58000 system_error

ERROR 源码确认 参考 未实测

条件名
system_error
宏名称
ERRCODE_SYSTEM_ERROR
最早已知存在
9.2.0
状态
有效

版本覆盖

  1. 18
  2. 17
  3. 16
  4. 15
  5. 14
  1. 13
  2. 12
  3. 11
  4. 10
  5. 9.6
  6. 9.5
  7. 9.4
  8. 9.3
  9. 9.2
  10. 9.1
  11. 9.0
  1. 19 beta
  2. 20 dev

版本条依据已采样构建显示;灰色版本可能尚未采样,悬停可查看。手册链接随版本选择,源码和运行证据保持原核验构建。

速览

58000 是 system-error 条件。在固定 backend 路径中,pg_promote 创建 promotion signal 文件后调用 kill(PostmasterPid, SIGUSR1);信号发送失败时以 ERROR 报告,并把操作系统的 %m 文本展开到消息中。

含义

代表性 backend primary 是 failed to send signal to postmaster: %m。代码在报告 ERROR 前先删除 promotion signal 文件,所以这里是 postmaster 通知路径中的系统调用失败,不是用户值或 SQL 语法错误。共享的 common/exec.c 使用 log_error 宏,并有两个编译时分支:非 FRONTEND 构建展开为 ereport(LOG, (errcodefn, errmsg_internal(...)));FRONTEND 构建忽略 errcode() 参数,把格式化文本写到 stderr。因此 frontend 工具消息不能证明存在客户端协议 58000 诊断,也不能证明客户端事务已回滚。common/logging.h 中独立的 pg_log_error 宏才映射到 PG_LOG_ERROR,但 pclose_check() 并不调用它。

消息

  • backend pg_promote 信号路径:primary 为 failed to send signal to postmaster: %m,severity 为 ERROR;展开文本取决于失败 kill() 调用当时的 OS errno。
  • 共享的 pclose_check() 源码:调用点模板是 %s() failed: %m;对 pclose() 会展开为 pclose() failed: <OS 文本>。非 FRONTEND 构建经 ereport(LOG) 携带传入的 ERRCODE_SYSTEM_ERROR;FRONTEND 构建忽略该 code、直接写 stderr,因此不是客户端协议 58000 路径。

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 failed to send signal to postmaster: %m

来源: 来源:src/backend/access/transam/xlogfuncs.c @ REL_18_6

诊断

保留 %m 展开后的完整 primary、操作类型(promotion signal、pclose 或其他系统 helper)、进程身份及服务器或工具日志上下文。对 backend pg_promote,检查 postmaster PID、信号权限/进程存活状态和 OS 错误。没有实际 errno 时,不要把系统错误替换成笼统的磁盘、权限或进程诊断;单凭 SQLSTATE 也不能判断事务结果。

处理

先修正展开消息所指出的操作系统条件,再确认 postmaster/服务器健康后重试。backend ERROR 通常会使当前显式事务进入错误状态,继续前先执行 ROLLBACK 或 ROLLBACK TO SAVEPOINT;autocommit 下也应在原因修正后再重试。pclose_check 的 frontend 日志由工具自身控制流处理,不应据此要求 SQL 回滚。若连接已断开,待服务器 ready 后重连并核对业务效果。

版本

锁定目录从 9.2.0 记录此条件;该目录边界不等于精确实现引入版本。固定源码覆盖 PostgreSQL 18.6。

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 58 系统错误(PostgreSQL自身以外的错误) System Error (errors external to PostgreSQL itself) 5 个 ↗
58000 system_error ERRCODE_SYSTEM_ERROR ERROR 9.2.0 起已知
外部系统调用失败,如发送信号返回错误。 有效
58030 io_error ERRCODE_IO_ERROR ERROR 7.4 起已知
文件读写发生 I/O 错误,如缓冲区写回失败。 有效
58P01 undefined_file ERRCODE_UNDEFINED_FILE ERROR 7.4 起已知
所需的文件或目录不存在,如表空间路径缺失。 有效
58P02 duplicate_file ERRCODE_DUPLICATE_FILE ERROR 7.4 起已知
目标文件或目录已存在且非空,无法创建。 有效
58P03 file_name_too_long ERRCODE_FILE_NAME_TOO_LONG ERROR 18.0 起已知
文件访问因路径名过长失败,对应 ENAMETOOLONG。 有效