我用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
中创建了该行。
有人知道为什么我会有这个错误吗?
答案 0 :(得分:0)
您应该
RETURN OLD;
而不是
RETURN NEW;
问题是删除触发器中未定义NEW
,并且返回NULL将中止删除。