更新时间:2025-05-29 GMT+08:00
失效重编译概述
失效重编译提供一次性入库、失效重编译和级联失效功能。
- 一次性入库:新建存储过程、函数和PACKAGE使用未定义的对象。例如表、函数或类型不存在,可新建成功,打印告警。系统表pg_object对应的valid字段为false。
- 失效重编译功能:当未定义的对象都存在时,运行失效重编译高级包pkg_util.gs_compile_schema或者alter compile功能时,把对象变为有效,然后正常执行存储过程、函数和PACKAGE。
- 级联失效功能:当被依赖的对象被删除时,不再级联删除依赖对象,而是失效依赖对象,例如函数出入参依赖表,删除表时,函数失效,但函数未被级联删除。
- 重新创建包头,不删除原有包体功能:当使用CREATE OR REPLACE PACKAGE覆盖原有包头定义时,已经存在的包体定义不会被删除,而是被失效。支持使用ALTER COMPILE功能,尝试将包体变为有效。
使用该功能,推荐开启如下GUC参数:
- enable_force_create_obj=on,提供一次性入库功能。
- ddl_invalid_mode='invalid',提供级联失效功能。

- 集中式A兼容模式数据库支持。
- 开启失效重编参数后,数据库存在用户自定义函数失效对象时,将无法使用\df全量查询或查询单个失效函数,提示存在失效对象报错。
- 视图依赖函数的场景,重建被依赖函数仅支持自动重建与函数相同schema的视图,其他场景需要手动重建视图。
- 不支持记录同义词的依赖关系,记录同义词指向的原始对象依赖关系。
- 不支持记录临时表的依赖关系。
- 不支持记录物化视图的依赖关系。
- PACKAGE和FUNCTION的执行块访问其他对象时,直接调用FUNCTION,直接调用PACKAGE内FUNCTION,直接访问PACKAGE变量记录依赖关系,其他场景不支持记录依赖关系。
- PACKAGE和FUNCTION变量的默认值、表达式右值,直接调用FUNCTION,直接调用PACKAGE内FUNCTION,直接访问PACKAGE变量记录依赖关系,其他场景不支持记录依赖关系。
- 自治事务函数调用,触发依赖对象嵌套编译,依赖对象状态不更新,需要手动ALTER PACKAGE刷新。
- 匿名块和函数参数的CAST类型转换使用失效PACKAGE的类型时,需要手动ALTER PACKAGE刷新。
父主题: 失效重编译