PostgreSQL 创建触发器 Trigger

本文详细介绍了PostgreSQL触发器的工作原理及其应用场景,并通过实例演示了如何创建触发器来记录表上的所有操作,包括插入、更新和删除等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器的知识点: 

  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();

 

  

 

转载于:https://www.cnblogs.com/yuzg/p/9081477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值