# 失效重编译函数
- transform_view_dep_source() 描述：刷新[GS_DEP_SOURCE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0949.html)系统表的source字段。即将视图定义语句中SELECT \*的星号扩展；将视图创建时对象使用的schema补充写入；刷新视图依赖关系。该函数仅支持管理员用户调用。
  参数：无
  返回值类型：void
  
- gs_compile_schema(schema_name in varchar2 default null, compile_all in boolean default false, retry_times in int default 10) 描述：重编译指定命名空间中的包、函数、存储过程和视图。
  参数：参数说明如[表1]所示。
  返回值类型：boolean，true表示重编译成功，false表示重编译失败。
   表1gs_compile_schema参数说明 
  | 参数          | 类型     | 入参/出参 | 是否可以为空 | 描述                                                                                                                                                                                                                                                                                                                                           |
  |:---|:---|:---|:---|:---|
  | schema_name | VARCHAR2 | IN      | 是   | 命名空间名称。                                                                                                                                                                                                                                                                                                                                    |
  | compile_all  | BOOLEAN   | IN     | 是    | 是否对全部对象进行重编译，包括当前处于有效状态的视图。 - false：编译PG_OBJECT表中失效状态的视图。  - true：编译PG_OBJECT表中所有的视图。   |
  | retry_times | INT     | IN       | 是    | 重编译失败，重试次数。                                                                                                                                                                                                                                                                                                                                |
     
  示例：
  ```
  -- 开启失效重编译参数。
  gaussdb=# SET enable_view_invalidation='on';
  -- 创建schema、表，视图依赖表，视图依赖视图。
  gaussdb=# DROP SCHEMA IF EXISTS tesch2 CASCADE;
  gaussdb=# CREATE SCHEMA tesch2;
  gaussdb=# SET current_schema = tesch2;
  gaussdb=# CREATE TABLE tab1 (c1 INT, c2 INT);
  NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'c1' as the distribution column by default.
  HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
  CREATE TABLE
  gaussdb=# CREATE VIEW v_tab1 AS SELECT * FROM tab1;
  gaussdb=# CREATE VIEW v_tab2 AS SELECT * FROM v_tab1;
  gaussdb=# CREATE VIEW v_tab3 AS SELECT * FROM tab1;
  -- 删除表。
  gaussdb=# DROP TABLE tab1;
  -- 查询对象有效性。
  gaussdb=# SELECT c.relname, o.valid FROM pg_catalog.pg_object o JOIN pg_catalog.pg_class c ON c.oid = o.object_oid WHERE c.relname = 'v_tab1' or c.relname = 'v_tab2' or c.relname = 'v_tab3';
   relname | valid 
  ---------+-------
   v_tab1  | f
   v_tab2  | f
   v_tab3  | f
  (3 rows)
  -- 恢复删除的表。
  gaussdb=# CREATE TABLE tab1 (c1 INT, c2 INT);
  NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'c1' as the distribution column by default.
  HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
  CREATE TABLE
  -- 重编译tesch2命名空间下视图对象。
  gaussdb=# CALL pg_catalog.gs_compile_schema('tesch2', true, 1);
  INFO:  successful
  CONTEXT:  referenced column: gs_compile_schema
  SQL statement "select pkg_util.gs_compile_schema(:schema_name, :compile_all, :retry_times);"
  PL/pgSQL function gs_compile_schema(character varying,boolean,integer) line 24 at EXECUTE statement
  INFO:  The number of executions is 1
  INFO:  successful
   gs_compile_schema 
  -------------------
   t
  (1 row)
  -- 再次查询视图有效性。
  gaussdb=# SELECT c.relname, o.valid FROM pg_catalog.pg_object o JOIN pg_catalog.pg_class c ON c.oid = o.object_oid WHERE c.relname = 'v_tab1' or c.relname = 'v_tab2' or c.relname = 'v_tab3';
   relname | valid 
  ---------+-------
   v_tab1  | t
   v_tab2  | t
   v_tab3  | t
  (3 rows)
  -- 删除视图。
  gaussdb=# DROP VIEW v_tab3;
  gaussdb=# DROP VIEW v_tab2;
  gaussdb=# DROP VIEW v_tab1;
  -- 删除表。
  gaussdb=# DROP TABLE tab1;
  gaussdb=# RESET current_schema;
  -- 删除schema。
  gaussdb=# DROP SCHEMA tesch2 CASCADE;
  ```
  
 
