更新时间:2026-10-21 GMT+08:00
触发器函数
- pg_get_triggerdef(oid)
参数:待查触发器的OID。
返回值类型:text
示例:
-- 创建表tri_insert。 gaussdb=# CREATE TABLE tri_insert (a int, b int); CREATE TABLE -- 创建函数trigger_func。 gaussdb=# CREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS ' BEGIN RAISE NOTICE ''trigger_func(%) called: action = %, when = %, level = %'', TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL; RETURN NULL; END;'; CREATE FUNCTION -- 创建触发器before_ins_stmt_trig。 gaussdb=# CREATE TRIGGER before_ins_stmt_trig BEFORE INSERT ON tri_insert FOR EACH row EXECUTE PROCEDURE trigger_func('before_ins_stmt'); CREATE TRIGGER -- 创建触发器after_ins_when_trig。 gaussdb=# CREATE TRIGGER after_ins_when_trig AFTER INSERT ON tri_insert FOR EACH ROW WHEN (new.a IS NOT NULL) EXECUTE PROCEDURE trigger_func('after_ins_when'); CREATE TRIGGER -- 查看表tri_insert的触发器定义信息。 gaussdb=# SELECT pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'tri_insert'::regclass; pg_get_triggerdef -------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE TRIGGER after_ins_when_trig AFTER INSERT ON tri_insert FOR EACH ROW WHEN ((new.a IS NOT NULL)) EXECUTE PROCEDURE trigger_func('after_ins_when') CREATE TRIGGER before_ins_stmt_trig BEFORE INSERT ON tri_insert FOR EACH ROW EXECUTE PROCEDURE trigger_func('before_ins_stmt') (2 rows) - pg_get_triggerdef(oid, boolean)
参数:待查触发器的OID及是否以pretty方式展示。
仅在创建trigger时指定WHEN条件的情况下,布尔类型参数才生效。
返回值类型:text
示例:
-- 查看表tri_insert的触发器定义信息,以非pretty形式。 gaussdb=# SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'tri_insert'::regclass; pg_get_triggerdef -------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE TRIGGER after_ins_when_trig AFTER INSERT ON tri_insert FOR EACH ROW WHEN ((new.a IS NOT NULL)) EXECUTE PROCEDURE trigger_func('after_ins_when') CREATE TRIGGER before_ins_stmt_trig BEFORE INSERT ON tri_insert FOR EACH ROW EXECUTE PROCEDURE trigger_func('before_ins_stmt') (2 rows) -- 查看表tri_insert的触发器定义信息,以pretty形式。 gaussdb=# SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'tri_insert'::regclass; pg_get_triggerdef ------------------------------------------------------------------------------------------------------------------------------------------------------ CREATE TRIGGER after_ins_when_trig AFTER INSERT ON tri_insert FOR EACH ROW WHEN (new.a IS NOT NULL) EXECUTE PROCEDURE trigger_func('after_ins_when') CREATE TRIGGER before_ins_stmt_trig BEFORE INSERT ON tri_insert FOR EACH ROW EXECUTE PROCEDURE trigger_func('before_ins_stmt') (2 rows) -- 清理表tri_insert。 gaussdb=# DROP TABLE tri_insert CASCADE; DROP TABLE -- 清理函数trigger_func。 gaussdb=# DROP FUNCTION trigger_func; DROP FUNCTION - suppress_redundant_updates_trigger()
描述:用于抑制无数据变化的更新操作。在更新数据操作前调用该函数,若更新后的数据相对更新前没有产生变化,则该更新操作不生效。
返回值类型:触发器
该函数为内置的触发器执行函数,只能在触发器定义时调用,且仅在BEFORE UPDATE触发器中生效。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
-- 创建表tri_update。 gaussdb=# CREATE TABLE tri_update (a int, b int); CREATE TABLE -- 插入数据(1,1)。 gaussdb=# INSERT INTO tri_update VALUES(1,1); INSERT 0 1 -- 创建BEFORE UPDATE触发器,触发器函数为suppress_redundant_updates_trigger。 gaussdb=# CREATE TRIGGER before_update_trig BEFORE UPDATE ON tri_update FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger(); WARNING: Trigger function with non-plpgsql type is not recommended. DETAIL: Non-plpgsql trigger function are not shippable by default. HINT: Unshippable trigger may lead to bad performance. CREATE TRIGGER -- 更新表中数据不变,依旧为(1,1),不执行更新操作。 gaussdb=# UPDATE tri_update SET b=1; UPDATE 0 -- 清理表tri_update。 gaussdb=# DROP TABLE tri_update CASCADE; DROP TABLE
父主题: 函数和操作符