我刚刚在数据库中添加了一个新的AFTER触发器,目前正在尝试使用一些计算布尔值更新现有表的一个新列。
但是,我遇到了以下错误:
错误:当前命令触发的操作已修改了要更新的元组
提示:考虑使用AFTER触发器而不是BEFORE触发器将更改传播到其他行。
我知道这与我添加的新后触发器有关,但我注意到
使残废
所以我不知道为什么会这样。。。因为没用,我
已完全删除
触发器,但我仍然无法更新表:
CREATE TABLE public.extractions_2
(
id bigint NOT NULL DEFAULT nextval('extractions_2_id_seq'::regclass),
settling_bank text,
created_at timestamp without time zone,
is_prehedge boolean,
CONSTRAINT extractions_2_pkey PRIMARY KEY (id),
CONSTRAINT extractions_2_filecode_created_at_key UNIQUE (filecode, created_at)
)
WITH (
OIDS=FALSE
);
CREATE TRIGGER set_is_prehedge
AFTER INSERT
ON public.extractions_2
FOR EACH ROW
EXECUTE PROCEDURE public.set_is_prehedge();
ALTER TABLE public.extractions_2 DISABLE TRIGGER set_is_prehedge;
CREATE OR REPLACE FUNCTION public.set_is_prehedge()
RETURNS trigger AS
$BODY$
begin
update NEW
set NEW.is_prehedge= case when(NEW.settling_bank LIKE '%PRE HEDGE%') THEN true ELSE false END;
return NEW;
end;
我尝试将表更新为:
update extractions_2 set
is_prehedge = case when(settling_bank LIKE '%PRE HEDGE%') THEN true ELSE false END;
。。。怎么了?
答案
:我需要一个BEFORE触发器;此外,我之前还有一个错误的UPDATE触发器,它会阻止我更新字段,我没有在这里发布它,因为我认为它不相关(它只是不相关,因为我以前从未更新过表,只是插入了)