PostgreSQL 创建触发器 Trigger

Posted 雅槐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL 创建触发器 Trigger相关的知识,希望对你有一定的参考价值。

触发器的知识点: 

  1. PostgreSQL在以下情况下执行/调用触发器:在尝试操作之前(在检查约束并尝试INSERTUPDATEDELETE之前)。或者在操作完成后(在检查约束并且INSERTUPDATEDELETE完成后)。或者不是操作(在视图中INSERTUPDATEDELETE的情况下)

  2. 对于操作修改的每一行,都会调用一个标记为FOR EACH ROWS的触发器。 另一方面,标记为FOR EACH STATEMENT的触发器只对任何给定的操作执行一次,而不管它修改多少行。

  3. 您可以为同一事件定义同一类型的多个触发器,但条件是按名称按字母顺序触发。

  4. 当与它们相关联的表被删除时,触发器被自动删除。

 

step1:  创建记录日志表, 跟踪记录表上的所有操作

  create table auditlog
       (
            operation varchar(100),
            id int,
            productname varchar(100),
            catagoryid int,
           subcatagoryid int,
           operationdate timestamp without time zone
        )

 

step2:  创建触发器相关的存储过程

CREATE FUNCTION public.auditinsertfunlog()
    RETURNS trigger
    LANGUAGE ‘plpgsql‘
    COST 100
    VOLATILE NOT LEAKPROOF
    ROWS 0
AS $BODY$

begin
 insert into auditlog (operation,id,productname,catagoryid,subcatagoryid,operationdate)
    values(‘insert‘,new.id,new."productName",new."catagoryID",new."subcatagoryID",current_timestamp);
    return new;
end;

$BODY$;

ALTER FUNCTION public.auditinsertfunlog()
    OWNER TO postgres;

 

step3: 创建触发器

    CREATE TRIGGER products_insert_trigger
    AFTER INSERT ON public."Products"
    FOR EACH ROW EXECUTE PROCEDURE public.auditinsertfunlog();

 

  

 






















以上是关于PostgreSQL 创建触发器 Trigger的主要内容,如果未能解决你的问题,请参考以下文章

(Postgresql) make table trigger function insert更改行的ID值到日志表中,用于自定义复制

在 PostgreSQL 9.1 中创建触发器时的异常

如何在 PostgreSQL 触发器函数中获取表名?

使用触发器/函数计算对 postgresql 的兴趣

PostgreSQL 全文索引

SQL Server 创建触发器(trigger)