更新时间:2025-10-17 GMT+08:00
重编译
通过函数调用或者ALTER COMPILE语法可以将失效的存储过程、函数和包重编译为有效。
使用示例如下所示。
示例
CREATE OR REPLACE FUNCTION func1 RETURN INT AS
BEGIN
RETURN 1;
END;
/
CREATE FUNCTION
CREATE OR REPLACE PACKAGE pkg IS
PROCEDURE proc1();
END pkg;
/
CREATE PACKAGE
CREATE OR REPLACE PACKAGE BODY pkg IS
PROCEDURE proc1() AS
BEGIN
RAISE INFO 'proc1';
END;
END pkg;
/
CREATE PACKAGE BODY
-- 运行失效重编译高级包。
CALL pkg_util.gs_compile_schema('public', false, 1);
-- 执行结果。
INFO: successful
gs_compile_schema
-------------------
(1 row)
-- 查询状态。
SELECT proname,valid FROM pg_object obj JOIN pg_proc proc ON obj.object_oid = proc.oid AND proname = 'func1' AND propackageid = 0;
proname | valid
---------+-------
func1 | t
(1 row)
SELECT pkgname,object_type,valid FROM pg_object obj JOIN gs_package pkg ON obj.object_oid = pkg.oid AND pkgname = 'pkg';
pkgname | object_type | valid
---------+-------------+-------
pkg | S | t
pkg | B | t
(2 rows)
-- 执行函数。
SELECT func1();
func1
-------
1
(1 row)
CALL pkg.proc1();
INFO: proc1
proc1
-------
(1 row)
-- 删除已创建的对象。
DROP FUNCTION func1;
DROP FUNCTION
DROP PACKAGE pkg;
NOTICE: drop cascades to function public.proc1()
DROP PACKAGE
父主题: 失效重编译