云数据库 GAUSSDB-失效重编译特性函数

时间:2025-06-03 09:35:59

失效重编译特性函数

  • gs_set_object_invalid()/gs_set_object_invalid(schema, objname, objtype)

    描述:将PACKAGE和FUNCTION在pg_object中的状态置为false,同时级联将依赖PACKAGE和FUNCTION的对象状态置为false。调用该函数的用户需要具有SYSADMIN权限。

    参数:该函数为重载函数。当无入参时,将当前DATABASE内的PACKAGE和FUNCTION对象置为失效。当指定schema、objname、objtype三个参数时可将当前DATABASE内的PACKAGE和FUNCTION对象在pg_object中的状态置为false。其中:schema为对象所属的schema名称;objname为对象名称;objtype为对象类型,对象为package类型时值为“package”,对象为函数或存储过程时值为“function”。

    • 需要将PACKAGE和FUNCTION和依赖PACKAGE和FUNCTION的对象状态置为失效时可以使用该函数。
    • 仅系统管理员可以调用函数。

    示例:

    该函数不返回失效结果,可通过pg_object系统表查询失效结果,对象有效时查找到对应的valid状态为true,对象失效后对应的valid状态为false。

    gs_set_plsql_invalid所属的Schema为pg_catalog,但不指定Schema也可调用该函数。

    -- 创建一个包pkg1,pkg2和函数f3,查询pg_object信息,状态为valid。
    SET enable_force_create_obj=on;
    SET
    SET ddl_invalid_mode=invalid;
    SET
    CREATE SCHEMA testInvalidate;
    CREATE SCHEMA
    SET CURRENT_SCHEMA TO testInvalidate;
    SET
    CREATE OR REPLACE PACKAGE pkg1 AS
    var1 VARCHAR;
    FUNCTION f1() RETURN VARCHAR;
    END pkg1;
    /
    CREATE PACKAGE
    CREATE OR REPLACE PACKAGE BODY pkg1 AS
    FUNCTION f1() RETURN VARCHAR
    IS
    BEGIN
    var1 := '2';
    RETURN var1;
    END;
    END pkg1;
    /
    CREATE PACKAGE BODY
    CREATE OR REPLACE PACKAGE pkg2 AS
    var1 pkg1.var1%TYPE;
    FUNCTION f2() RETURN VARCHAR;
    END pkg2;
    /
    CREATE PACKAGE
    CREATE OR REPLACE PACKAGE BODY pkg2 AS
    FUNCTION f2() RETURN VARCHAR
    IS
    BEGIN
    var1 := '2';
    RETURN var1;
    END;
    END pkg2;
    /
    CREATE PACKAGE BODY
    CREATE OR REPLACE FUNCTION f3() RETURN VARCHAR
    IS
    DECLARE
    var2 VARCHAR := 'li2';
    BEGIN
    var2='22';
    RETURN var2;
    END
    /
    CREATE FUNCTION
    SELECT pkg1.f1();
     f1 
    ----
     2
    (1 row)
    SELECT pkg2.f2();
     f2 
    ----
     2
    (1 row)
    SELECT f3();
     f3 
    ----
     22
    (1 row)
    
    -- 调用函数,指定schema、函数名、类型即可将pkg1和pkg2失效,再次查询pg_object,pkg1和pkg2对应的valid为false。
    SELECT gs_set_object_invalid('testinvalidate','pkg1','package');
     set_object_invalid 
    -------------------------
    (1 row)
    -- 如果要失效function,参数如下所示,查询pg_object,f3对应的valid为false。
    SELECT gs_set_object_invalid('testinvalidate','f3','function');
     set_object_invalid 
    -------------------------
    (1 row)
    -- 调用时没有入参,则将失效所有缓存对象。
    SELECT gs_set_object_invalid();
     set_object_invalid 
    -------------------------
    (1 row)
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-2001.html
提示

您即将访问非华为云网站,请注意账号财产安全