更新时间:2026-10-21 GMT+08:00
分享

失效重编译函数

  • transform_view_dep_source()

    描述:刷新GS_DEP_SOURCE系统表的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表示重编译失败。

    表1 gs_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;

相关文档