云数据库 GAUSSDB-失效重编译特性函数
失效重编译特性函数
- 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)