
# 特性概述
#### 功能定义
失效重编译是指在数据库中，当视图对象失效后，进行的重新编译操作。它的目的是恢复失效对象的功能，确保这些对象能够正确执行。失效可能由多种原因引起，尤其在数据库架构或依赖的对象发生变化后，比如表结构的修改、依赖对象的删除或更新等。
失效重编译主要涉及以下几个功能模块：
- 一次性入库：创建视图，不满足编译检查要求，例如依赖的外部对象尚未创建，也能将视图插入到数据库的系统表中。
- 级联失效：当被依赖的对象变更时，依赖对象会级联失效。例如变更表字段时，依赖当前表的对象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类型转换之间依赖关系。
    ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
    依赖关系类型请参见《参考》中"系统表和系统视图 \> 系统表 \> 其他系统表 \> PG_DEPEND"章节。
    
  
  - 在开启事务后恢复视图依赖对象情况下，不支持通过调用视图触发其自动重编译。
   
- 功能约束：
  - 备机不支持失效重编译。
  
  - 不支持同义词发生DDL变更触发视图失效。
  
  - 通过DBLINK访问远端同义词的视图，不受远端同义词变更影响。
  
  - 临时视图及依赖本地临时表的视图不支持自动重编译，需手动重编译。
  
  - 回收站中视图对象不支持失效重编译。
   
 
#### 技术架构
失效重编译涉及模块：系统表、语法。
- 系统表：
  - PG_OBJECT：记录对象有效性信息。
  
  - PG_DEPEND：记录数据库对象间的依赖关系。
  
  - GS_DEP_SOURCE：记录对象原始定义信息和部分编译产物。
   

- 语法：ALTER VIEW objname COMPILE语法、视图创建语法、视图访问语法。
 
