更新时间:2026-07-28 GMT+08:00
特性概述
功能定义
失效重编译是指在数据库中,当视图对象失效后,进行的重新编译操作。它的目的是恢复失效对象的功能,确保这些对象能够正确执行。失效可能由多种原因引起,尤其在数据库架构或依赖的对象发生变化后,比如表结构的修改、依赖对象的删除或更新等。
失效重编译主要涉及以下几个功能模块:
- 一次性入库:创建视图,不满足编译检查要求,例如依赖的外部对象尚未创建,也能将视图插入到数据库的系统表中。
- 级联失效:当被依赖的对象变更时,依赖对象会级联失效。例如变更表字段时,依赖当前表的对象obj1会被失效,同时,依赖对象obj1的对象obj2会被级联失效。
- 重编译:包括手动重编译、自动重编译和批量重编译。
使用失效重编译功能,需要开启如下GUC参数:
- enable_force_create_obj=on,提供视图一次性入库功能。
- enable_view_invalidation=on,开启视图的级联失效功能,参数值设置为off时表示关闭视图的级联失效功能。
用户场景
场景一:用户第一次部署数据库。
场景二:用户业务变更。
规格约束
失效重编译存在以下规格约束:
- 兼容性:支持所有兼容模式数据库。
- 功能规格:
- 创建视图指定分区,新增视图与分区之间依赖关系;创建视图使用自定义类型或CAST类型转换,新增视图与自定义类型或CAST类型转换之间依赖关系。
依赖关系类型请参见《参考》中“系统表和系统视图 > 系统表 > 其他系统表 > PG_DEPEND”章节。
- 在开启事务后恢复视图依赖对象情况下,不支持通过调用视图触发其自动重编译。
- 创建视图指定分区,新增视图与分区之间依赖关系;创建视图使用自定义类型或CAST类型转换,新增视图与自定义类型或CAST类型转换之间依赖关系。
- 功能约束:
- 备机不支持失效重编译。
- 不支持同义词发生DDL变更触发视图失效。
- 通过DBLINK访问远端同义词的视图,不受远端同义词变更影响。
- 临时视图及依赖本地临时表的视图不支持自动重编译,需手动重编译。
- 回收站中视图对象不支持失效重编译。
技术架构
失效重编译涉及模块:系统表、语法。
- 系统表:
- PG_OBJECT:记录对象有效性信息。
- PG_DEPEND:记录数据库对象间的依赖关系。
- GS_DEP_SOURCE:记录对象原始定义信息和部分编译产物。
- 语法:ALTER VIEW objname COMPILE语法、视图创建语法、视图访问语法。
父主题: 失效重编译