首页 > 解决方案 > 如何在 Postgresql 中更新后创建触发器

问题描述

我有桌子Room Details

在此处输入图像描述

Log Room Status

在此处输入图像描述

我想创建一个触发器,当room details我在表中更改status列时,然后在log room status表中status列之前和之后的状态将自动更改。例如,当Room Details状态为时Vacant Dirty,我将其更改为Vacant Clean,则之前状态列中的日志室状态将填充为Vacant Dirty,之后状态将填充为Vacant Clean

这是我的代码:

CREATE OR REPLACE FUNCTION public.log_rs_history()
  RETURNS trigger AS
$BODY$DECLARE

BEGIN
IF status = 'UPDATE' THEN
UPDATE log_room_status set status_before=old.status_before, status_after=new.status_after where id_room=id_room and room_number=room_number;
      END IF;
  RETURN new;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

  CREATE TRIGGER log_history
  AFTER UPDATE
  ON public.room_details
  FOR EACH ROW
  EXECUTE PROCEDURE public.product_hs_history();    

标签: sqlpostgresqltriggersdatabase-trigger

解决方案


你很近。我认为您打算这样做:

CREATE OR REPLACE FUNCTION public.log_rs_history()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
IF TG_OP = 'UPDATE' THEN
  UPDATE log_room_status
     SET status_before=old.status,
         status_after=new.status
   WHERE id_room=new.id_room
     AND room_number=new.room_number;
  END IF;
  RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

CREATE TRIGGER log_history
  AFTER UPDATE
  ON public.room_details
  FOR EACH ROW
  EXECUTE PROCEDURE public.log_rs_history();    

推荐阅读