Postgresql

postgresql 觸發器 –> 觸發器函式 –> 子觸發器函式鏈

  • May 9, 2022

我有一個複雜的觸發功能,我希望將其分解為多個子功能。觸發器將呼叫主函式,而主函式中將包含邏輯來決定呼叫哪個子函式。這是據我所知:

create table dbo.thing (thingid int);
create table dbo.thingtwo (thingid int);

create or replace function dbo.tf2(thingid int) returns void as $$
   insert into dbo.thingtwo values (thingid);
$$ language sql; 

create or replace function dbo.tf1() returns trigger as $thinginsert$
begin    
   perform dbo.tf2(new.thingid);
   return null;
end;
$thinginsert$ language plpgsql; 

create trigger thinginsert
after insert on dbo.thing
for each row execute procedure dbo.tf1();

問題是我想將整個傳遞給new.*第二個觸發函式,而不僅僅是一些列。最終會有條件邏輯dbo.tf1()來決定是否去dbo.tf2()等等dbo.tf3()

我怎樣才能使這項工作?


我正在使用 Postgres 12.8。

在 table 上的觸發器內部thing,是具有與 table 列相同的屬性名稱和數據類型NEW的複合類型。thing所以,

create or replace function dbo.tf2(thing_row thing) returns void as $$
   insert into dbo.thingtwo values (thing_row.thingid);
$$ language sql; 

create or replace function dbo.tf1() returns trigger as $thinginsert$
begin    
   perform dbo.tf2(new);
   return null;
end;
$thinginsert$ language plpgsql; 

小提琴

關於 SO 的相關問答

引用自:https://dba.stackexchange.com/questions/311914