Updated on 2025-05-29 GMT+08:00

Cascading Failure

After the GUC parameter ddl_invalid_mode is set to invalid, the cascading of functions, stored procedures, and packages becomes invalid.

Examples

-- Configure the following parameters:
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

-- Query status.
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)

-- The function is not deleted and still exists.
SELECT proname FROM pg_proc WHERE proname = 'func1' AND propackageid = 0;
 proname 
---------
 func1
(1 row)

-- Drop a created object.
DROP FUNCTION func1;
DROP FUNCTION