文档首页/ 云数据库 GaussDB/ 开发指南(分布式_V2.0-10.x)/ FAQ-非透明多写/ 开发设计/ 如何查询当前数据库中有哪些触发器,以及触发器的定义?
更新时间: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();

相关文档