创建历史记录触发器?



我用postgresql创建了2个表:

afp
(
id bigint NOT NULL DEFAULT nextval('afp_id_seq'::regclass),
perm_number character varying(90),
type bigint,
start_date character varying(50),
CONSTRAINT afp_pkey PRIMARY KEY (id)
)
history_afp
(
id bigint NOT NULL DEFAULT nextval('history_afp_id_seq'::regclass),
reason bigint,
type bigint,
ask_date character varying(50),
CONSTRAINT history_afp_pkey PRIMARY KEY (id)
)

我想有一个历史记录触发器,所以当我删除afp中的一行时,该行将进入history_afp

CREATE FUNCTION public.before_update()
RETURNS TRIGGER
SET SCHEMA 'public'
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO public.history_afp (
type,
ask_date
)
VALUES (
OLD.type,
OLD.start_date);
RETURN NEW;
END;
$$; 
CREATE TRIGGER before_update_trigger
BEFORE DELETE
ON public.afp
FOR EACH ROW
EXECUTE PROCEDURE public.before_update();

当我删除表afp中的行时,它会在history_afp中创建我的新行,但它会在我的表afp中再次创建该行。

有人知道为什么我有这个错误吗?

你应该

RETURN OLD;

而不是

RETURN NEW;

问题是删除触发器中未定义NEW,返回 NULL 将中止删除。

最新更新