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

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

文档 / SQL 状态码 / Class 55 前置状态不满足

55P02 cant_change_runtime_param

ERROR 源码确认 参考 未实测

类别
Class 55 前置状态不满足
严重等级
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,配置文件、数据库/角色设置等路径可能使用 LOGWARNING。源码先检查 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 changedset_config_with_handle() 的调用者提供 severity,而 ALTER SYSTEM guard 使用 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

来源:src/backend/utils/misc/guc.c @ REL_18_6

主消息 parameter "%s" cannot be set after connection start

来源:src/backend/utils/misc/guc.c @ REL_18_6

主消息 function can only be called when server is in binary upgrade mode

来源:src/backend/utils/adt/pg_upgrade_support.c @ REL_18_6

诊断

记录参数名、完整 primary message、设置来源(SET、启动选项、配置重载、数据库/角色设置、ALTER SYSTEM 或 binary-upgrade helper)及服务器阶段。检查 pg_settings.contextpending_restartsourcesourcefilepostmaster 指向重启,sighup 指向 reload,backend 指向新连接。值格式错误属于其他 SQLSTATE,不能只凭 55P02 判断。

用户发出的 SET 若以 ERROR 失败,会使显式事务进入错误状态;配置重载或后台路径可能只记录日志或发 WARNING,并不等于客户端事务被回滚,要以实际 severity 和连接状态为准。

处理

pg_settings 指示的上下文修改:只能重启的值写入配置后重启,SIGHUP 值执行 reload,backend 值在新 session 中设置,内部或 binary-upgrade 参数交给所属机制。显式事务中的 SQL SET 失败后,先执行 ROLLBACKROLLBACK TO SAVEPOINT,再继续发送命令。autocommit 下先修正生命周期或设置来源,再重试;不要盲目重复同一被拒绝的操作。转换完成后核对实际生效值。

版本

锁定目录从 7.4 记录此条件;固定源码覆盖 PostgreSQL 18.6。已知存在于 是目录边界,不等于精确实现引入版本。

来源

证据

断言

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

同类 SQL 状态码

状态码 条件名 宏名称 严重等级 版本
Class 55 前置状态不满足 Object Not In Prerequisite State 5 个
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 值。 活跃