更新时间:2026-07-28 GMT+08:00
分享

特性概述

功能定义

失效重编译是指在数据库中,当视图对象失效后,进行的重新编译操作。它的目的是恢复失效对象的功能,确保这些对象能够正确执行。失效可能由多种原因引起,尤其在数据库架构或依赖的对象发生变化后,比如表结构的修改、依赖对象的删除或更新等。

失效重编译主要涉及以下几个功能模块:

  • 一次性入库:创建视图,不满足编译检查要求,例如依赖的外部对象尚未创建,也能将视图插入到数据库的系统表中。
  • 级联失效:当被依赖的对象变更时,依赖对象会级联失效。例如变更表字段时,依赖当前表的对象obj1会被失效,同时,依赖对象obj1的对象obj2会被级联失效。
  • 重编译:包括手动重编译、自动重编译和批量重编译。
    • 手动重编译:
      ALTER VIEW objname COMPILE;
    • 自动重编译:

      GaussDB会自动尝试重编译失效的对象,例如当失效的视图被调用时,数据库会在执行时自动重编译。

    • 批量重编译:

      通过以下语句可查询数据库中的所有失效对象:

      SELECT * FROM pg_object WHERE valid='f';

      通过以下语句可调用接口对所有失效对象进行批量重编译:

      CALL PG_CATALOG.GS_COMPILE_SCHEMA(schema_name, false, 10);

使用失效重编译功能,需要开启如下GUC参数:

  • enable_force_create_obj=on,提供视图一次性入库功能。
  • enable_view_invalidation=on,开启视图的级联失效功能,参数值设置为off时表示关闭视图的级联失效功能。

用户场景

场景一:用户第一次部署数据库。

场景二:用户业务变更。

规格约束

失效重编译存在以下规格约束:

  • 兼容性:支持所有兼容模式数据库。
  • 功能规格:
    • 创建视图指定分区,新增视图与分区之间依赖关系;创建视图使用自定义类型或CAST类型转换,新增视图与自定义类型或CAST类型转换之间依赖关系。

      依赖关系类型请参见《参考》中“系统表和系统视图 > 系统表 > 其他系统表 > PG_DEPEND”章节。

    • 在开启事务后恢复视图依赖对象情况下,不支持通过调用视图触发其自动重编译。
  • 功能约束:
    • 备机不支持失效重编译。
    • 不支持同义词发生DDL变更触发视图失效。
    • 通过DBLINK访问远端同义词的视图,不受远端同义词变更影响。
    • 临时视图及依赖本地临时表的视图不支持自动重编译,需手动重编译。
    • 回收站中视图对象不支持失效重编译。

技术架构

失效重编译涉及模块:系统表、语法。

  • 系统表:
    • PG_OBJECT:记录对象有效性信息。
    • PG_DEPEND:记录数据库对象间的依赖关系。
    • GS_DEP_SOURCE:记录对象原始定义信息和部分编译产物。
  • 语法:ALTER VIEW objname COMPILE语法、视图创建语法、视图访问语法。

相关文档