
# 如何查询当前数据库中有哪些触发器，以及触发器的定义？
答：可以使用如下方式查询出当前数据库中的触发器信息。
- 前置操作：创建表和触发器。
  ```
  --建表。
  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();
  ```
  
 
