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

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

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

58P02 duplicate_file

58P02 — duplicate_file

ERROR 源码确认 参考 未实测

条件名
duplicate_file
宏名称
ERRCODE_DUPLICATE_FILE
最早已知存在
7.4
状态
有效

手册收录:8.1、8.2、8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、11、12、13、14、15、16、17、18、19、20。此处仅表示同版本手册收录,运行证据仍以原核验构建为准。

版本覆盖

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

58P02

速览 {#at-a-glance}

58P02 是固定服务器端基础备份输出路径中的 duplicate-file 条件。缺失目录会尝试创建,已有空目录可以使用,已有非空目录则报告此码。

含义 {#meaning}

bbsink_server_new() 先检查并提交权限校验事务,然后拒绝相对路径并调用 pg_check_dir(pathname):结果 0 创建目录,结果 1 接受空目录,结果 2–4 进入固定的 ERRCODE_DUPLICATE_FILE 分支;访问错误走另一条 errcode_for_file_access() 分支。这是基础备份输出保护,不证明 PostgreSQL 中所有 EEXIST 或非空目录都使用 58P02。

消息 {#messages}

  • ERROR,SQLSTATE 58P02:directory "%s" exists but is not empty。
  • ERROR,使用 errcode_for_file_access():could not access directory "%s": %m。
  • ERROR,目标不存在但创建失败时,使用 errcode_for_file_access():could not create directory "%s": %m。

后两个模板的 SQLSTATE 由保存的 OS errno 决定,不能因为它们在同一函数中就都标成 58P02。

诊断 {#diagnosis}

确认路径确实是预期的基础备份目标,检查所有者、挂载和内容,并判断是完整旧备份还是中断产物;变更前保留目录清单。源码在内部权限校验事务提交后才准备输出目录,因此这里表示备份建立失败,不能假设可以靠继续执行 SQL 修复用户 DML 事务。

处理 {#response}

按备份策略使用已确认为空的目标,或先归档旧输出。创建后验证完整备份和 manifest;不要递归删除或强制覆盖未知目录。若外层客户端报告 ERROR,按实际会话状态回滚到已有保存点或事务;ROLLBACK 不能把非空备份目录变安全。只有所属服务器进程被终止时才需要新连接。

版本 {#versions}

锁定目录从 7.4 记录此条件;固定基础备份路径来自 PostgreSQL 18.6。本源码条目没有修改或测试备份目标。

相关 {#related}

58P01、58P03、53100

来源 {#sources}

src/backend/backup/basebackup_server.c#L59-L125

结构化证据记录保存目录状态分支、动态 errno 路径和源码/运行边界。

来源

证据

断言

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

报文模板

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

主消息 directory "%s" exists but is not empty

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

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

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

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

来源: 来源:src/backend/backup/basebackup_server.c @ REL_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。 有效