我有一個UPSERT
觸發器可能會更新,而不是在插入操作時插入。我已經在該表上插入了函數,並且returning id
但是它在更新而不是插入時不會返回一個id。我想在兩種情況下都能得到這個id。PostgreSQL UPSERT觸發返回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;
向我們顯示您的代碼 –
已更新爲觸發代碼。函數只是使用'RETURNING id'的INSERT查詢。 –
看起來不像完整定義,'DESCRIBE'部分缺失。 – vyegorov