文档 / SQL 状态码 / Class 55 前置状态不满足
55P02 cant_change_runtime_param
ERROR 源码确认 参考 未实测
- 条件名
cant_change_runtime_param- 宏名称
ERRCODE_CANT_CHANGE_RUNTIME_PARAM- 启用版本
- 7.4
- 状态
- 活跃
版本覆盖
速览
55P02 表示 PostgreSQL 因 GUC 上下文或服务器生命周期阶段不允许,而拒绝修改运行时参数。同一条件名覆盖只能重启、只能 SIGHUP、只能在 backend 启动时、内部参数以及 binary-upgrade guard 等路径。
含义
set_config_with_handle() 使用 ereport(elevel, ...),所以客户端看到的 severity 取决于调用者:SQL SET 通常使用 ERROR,配置文件、数据库/角色设置等路径可能使用 LOG 或 WARNING。源码先检查 GUC context:内部参数不能由普通调用者修改;PGC_POSTMASTER 参数需要重启;PGC_SIGHUP 参数在 session 中修改会报 parameter "%s" cannot be changed now;backend 或 superuser-backend 参数在连接启动后修改会报 parameter "%s" cannot be set after connection start。重启提示也用于重载时试图改变 postmaster 参数的情形,ALTER SYSTEM 还会拒绝不能写入其配置文件的参数。
pg_upgrade_support.c 另有 binary-upgrade guard:IsBinaryUpgrade 为假时,升级辅助函数报此码。这是内部管理前置条件,不是普通 pg_settings.context 判断。
消息
- 内部参数或配置文件拒绝:primary 为
parameter "%s" cannot be changed;set_config_with_handle()的调用者提供 severity,而ALTER SYSTEMguard 使用 ERROR。 - 只能重启的参数:primary 为
parameter "%s" cannot be changed without restarting the server;severity 由调用者提供。 - 在 session 中修改 SIGHUP 参数:primary 为
parameter "%s" cannot be changed now;severity 由调用者提供。 - 连接启动后修改 backend 参数:primary 为
parameter "%s" cannot be set after connection start;severity 由调用者提供。 - binary-upgrade 模式外调用升级 helper:primary 为
function can only be called when server is in binary upgrade mode,ERROR。
报文模板
源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。
parameter "%s" cannot be changed without restarting the server
来源:src/backend/utils/misc/guc.c @ REL_18_6 · src/backend/utils/misc/guc.c @ REL_18_6
parameter "%s" cannot be changed now
parameter "%s" cannot be set after connection start
parameter "%s" cannot be changed
来源:src/backend/utils/adt/pg_upgrade_support.c @ REL_18_6 · src/backend/utils/misc/guc.c @ REL_18_6
function can only be called when server is in binary upgrade mode
诊断
记录参数名、完整 primary message、设置来源(SET、启动选项、配置重载、数据库/角色设置、ALTER SYSTEM 或 binary-upgrade helper)及服务器阶段。检查 pg_settings.context、pending_restart、source 和 sourcefile:postmaster 指向重启,sighup 指向 reload,backend 指向新连接。值格式错误属于其他 SQLSTATE,不能只凭 55P02 判断。
用户发出的 SET 若以 ERROR 失败,会使显式事务进入错误状态;配置重载或后台路径可能只记录日志或发 WARNING,并不等于客户端事务被回滚,要以实际 severity 和连接状态为准。
处理
按 pg_settings 指示的上下文修改:只能重启的值写入配置后重启,SIGHUP 值执行 reload,backend 值在新 session 中设置,内部或 binary-upgrade 参数交给所属机制。显式事务中的 SQL SET 失败后,先执行 ROLLBACK 或 ROLLBACK TO SAVEPOINT,再继续发送命令。autocommit 下先修正生命周期或设置来源,再重试;不要盲目重复同一被拒绝的操作。转换完成后核对实际生效值。
版本
锁定目录从 7.4 记录此条件;固定源码覆盖 PostgreSQL 18.6。已知存在于 是目录边界,不等于精确实现引入版本。
来源
- 上游源码 src/backend/utils/errcodes.txt 第 426 行
- 上游源码 src/backend/utils/misc/guc.c 第 3407 行
- 上游源码 src/backend/utils/misc/guc.c 第 3477 行
- 上游源码 src/backend/utils/misc/guc.c 第 3550 行
- 上游源码 src/backend/utils/adt/pg_upgrade_support.c 第 32 行
- 上游源码 src/backend/utils/misc/guc.c 第 4691 行
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
55P02 is cant_change_runtime_param in SQLSTATE Class 55.
-
The fixed GUC context guards, caller severity selection, ALTER SYSTEM guard, and binary-upgrade guard support the mechanisms described.
-
The same report group uses caller-supplied elevel: SQL settings normally reach ERROR, while file/database/role sources can use LOG or WARNING.
-
The locked catalogue records 55P02 from 7.4; that boundary does not prove exact implementation introduction.
同类 SQL 状态码
| 状态码 | 条件名 | 宏名称 | 严重等级 | 版本 |
|---|---|---|---|---|
| 55000 | object_not_in_prerequisite_state | ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE |
ERROR | 7.4 |
| 对象或服务器未处于操作所需的前置状态。 | 活跃 | |||
| 55006 | object_in_use | ERRCODE_OBJECT_IN_USE |
ERROR | 7.4 |
| 对象正被使用,操作与进行中的占用冲突。 | 活跃 | |||
| 55P02 | cant_change_runtime_param | ERRCODE_CANT_CHANGE_RUNTIME_PARAM |
ERROR | 7.4 |
| 当前上下文或阶段不允许修改该运行时参数。 | 活跃 | |||
| 55P03 | lock_not_available | ERRCODE_LOCK_NOT_AVAILABLE |
ERROR | 8.0 |
| 当前等待策略下取不到锁,含 lock_timeout 到期。 | 活跃 | |||
| 55P04 | unsafe_new_enum_value_usage | ERRCODE_UNSAFE_NEW_ENUM_VALUE_USAGE |
ERROR | 12 |
| 同一事务中使用了尚未提交的新增 enum 值。 | 活跃 | |||