选择 打开 改范围 完整检索页

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

文档 / SQL 状态码 / Class 58 系统错误

58P03 file_name_too_long

ERROR 源码确认 详解 未实测

类别
Class 58 系统错误
严重等级
ERROR
条件名
file_name_too_long
宏名称
ERRCODE_FILE_NAME_TOO_LONG
启用版本
18
状态
活跃

版本覆盖

  1. 18
  2. 17
  3. 16
  4. 15
  5. 14
  1. 13
  2. 12
  3. 11
  4. 10
  1. 19 beta
  2. 20 dev

速览

58P03 由 PostgreSQL 文件访问 errno 辅助函数在保存的 OS errno 为 ENAMETOOLONG 时选择。它不是固定的 file name too long 主消息;调用者提供带 %m 的消息,辅助函数提供 SQLSTATE。

含义

errcode_for_file_access()ENAMETOOLONG 映射为 ERRCODE_FILE_NAME_TOO_LONG。同一完整 switch 还把 ENOENT 映射为 58P01EEXIST 映射为 58P02ENOSPC 映射为 53100EIO 映射为 58030,其他 errno 可能落到别的代码。辅助函数明确要求调用者的主消息保留 %m,所以 OS 文本和 locale(区域设置)是诊断的一部分。

18.6 固定后端调用者包括 base backup 的 could not access directory "%s": %m 和表空间的 could not set permissions on directory "%s": %m;两者先以 ERROR 发出,再由辅助函数选择代码。这说明实际操作上下文很重要:同一 SQLSTATE 可以来自不同文件操作,其他调用者的文件名过长也可能使用不同主消息模板。

消息

  • ERROR,base backup 代表主消息:could not access directory "%s": %m
  • ERROR,表空间代表主消息:could not set permissions on directory "%s": %m
  • %m 展开为保存的 OS 错误文本;若 errno 是 ENAMETOOLONGerrcode_for_file_access() 提供 SQLSTATE 58P03

本次核验没有找到脱离调用者的固定 58P03 主消息。不要把 %m 换成臆造的英文句子,也不要仅凭条件名推断扩展报文。

报文模板

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

主消息 could not access directory "%s": %m

来源:src/backend/backup/basebackup_server.c @ REL_18_6

主消息 could not set permissions on directory "%s": %m

来源:src/backend/commands/tablespace.c @ REL_18_6

诊断

保留完整主消息/详细信息/上下文、操作和组件、完整路径、OS errno、文件系统限制、编码及 PostgreSQL 对象名映射。区分文件系统组件长度限制与 PostgreSQL 标识符限制,也要区分辅助函数的 ENAMETOOLONG 分支和 ENOENTEEXIST、磁盘满、I/O 分支。固定源码确认的是辅助函数与代表调用者,不声称在特定主机自然复现。

处理

使用组件和文件系统接受的路径/名称,或移动目标并保留持久映射。客户端 ERROR 若发生在显式事务中,继续执行前必须 ROLLBACK 或回到已有保存点;修正路径后重试受影响操作,不要继续发送无关语句。启动/后台调用可能没有客户端事务;后端已终止时使用新连接。上报时保留原始 OS 详细信息。

版本

锁定目录从 18.0 记录 58P03;固定辅助函数与调用者来自 PostgreSQL 18.6。本页仅源码复核,没有自然运行声明。

来源

证据

断言

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

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 58 系统错误 System Error (errors external to PostgreSQL itself) 5 个
58000 system_error ERRCODE_SYSTEM_ERROR ERROR 9.2
外部系统调用失败,如发送信号返回错误。 活跃
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
文件访问因路径名过长失败,对应 ENAMETOOLONG。 活跃