更新时间:2026-07-28 GMT+08:00
如何查询当前数据库中有哪些触发器,以及触发器的定义?
答:可以使用如下方式查询出当前数据库中的触发器信息。
- 前置操作:创建表和触发器。
--建表。 gaussdb=# CREATE TABLE test(c1 int); --创建触发器函数。 gaussdb=# CREATE OR REPLACE FUNCTION func_test() RETURNS TRIGGER AS $$ DECLARE BEGIN UPDATE test SET c1 = c1+200 WHERE id = NEW.id; RETURN NEW; END$$ LANGUAGE plpgsql; --创建触发器。 gaussdb=# CREATE TRIGGER trg_ins_test AFTER INSERT ON test FOR EACH ROW EXECUTE PROCEDURE func_test();
- 查询当前数据库中的触发器和触发器的定义。
gaussdb=# SELECT tgname FROM pg_trigger; tgname -------------- trg_ins_test (1 row) gaussdb=# SELECT pg_get_triggerdef(oid) FROM pg_trigger where tgname = 'trg_ins_test'; pg_get_triggerdef --------------------------------------------------------------------------------------------- CREATE TRIGGER trg_ins_test AFTER INSERT ON test FOR EACH ROW EXECUTE PROCEDURE func_test() (1 row) --查询触发器函数的定义。 gaussdb=# \sf func_test() CREATE OR REPLACE FUNCTION public.func_test() RETURNS trigger LANGUAGE plpgsql NOT FENCED NOT SHIPPABLE AS $function$ DECLARE BEGIN UPDATE test SET c1 = c1+200 WHERE id = NEW.id; RETURN NEW;END$function$; --删除表。 --删除表之后触发器会被级联删除,触发器的相关函数不会被级联删除。 gaussdb=# DROP TABLE test; gaussdb=# DROP FUNCTION func_test();
父主题: 开发设计