更新时间:2025-05-29 GMT+08:00

级联失效

设置GUC参数ddl_invalid_mode值为invalid后,支持函数、存储过程和包的级联失效。

示例

--设置如下参数:
SET ddl_invalid_mode='invalid';
SET

CREATE TYPE type1 AS (f1 int, f2 text);
CREATE TYPE
CREATE OR REPLACE FUNCTION func1(var type1) RETURN varchar
IS
BEGIN
RETURN NULL;
END;
/
CREATE FUNCTION
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)

DROP TYPE type1;
DROP TYPE

-- 查询状态。
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   | f
(1 row)

-- 函数未被删除,函数依然存在。
SELECT proname FROM pg_proc WHERE proname = 'func1' AND propackageid = 0;
 proname 
---------
 func1
(1 row)

-- 删除已创建的对象。
DROP FUNCTION func1;
DROP FUNCTION