我在表上有UPSERT
触发器,可以在执行插入操作时更新而不是插入。我在该表和returning id
上执行插入功能但是在更新而不是插入时它不返回id。我希望在两种情况下都能获得id。
触发代码
perform 1 from tera_subject
where id = new.subject_id and owner = new.user_id;
if found then
return null;
else
select id into vote_id from tera_votes where
user_id = new.user_id and
subject_id = new.subject_id;
if not found then
return new;
else
-- raise notice 'vote_id: % ; vote: %',vote_id,new.vote;
if(tg_op = 'INSERT') then
begin
-- raise notice 'redirecting to update';
update tera_votes
set vote=new.vote
WHERE id = vote_id;
end;
elsif(tg_op = 'UPDATE') then
-- raise notice 'in update';
return new;
end if;
-- raise notice 'end of trigger %',tg_op;
return null;
end if;
end if;
end;
答案 0 :(得分:2)
我认为你不会被触发器“返回”任何东西。
你在里面做的是:
INSERT
语句。这意味着,INSERT
以一种简单的方式终止(毫无例外),但这也意味着无法向您提供任何细节,因为触发器函数不会返回任何值。
如果您需要拥有UPSERT编辑项目的ID,请考虑使用始终为您返回ID的功能,例如this one。