![](/img/trans.png)
[英]how do I insert from NEW or OLD into a dynamically named table within a PostgreSQL trigger
[英]How to pass NEW/OLD to procedures called from trigger functions in PostgreSQL?
假設我有一個觸發函數,但是它的代碼是如此復雜,以至於將其拆分為更多的過程將很方便。 我想在所有變量中都使用NEW(或OLD用於UPDATE / DELETE觸發器)變量。 除了將其作為函數參數發送給從原始觸發函數調用的每個過程之外,還有其他選擇嗎?
如果您確實需要傳遞它們,我很確定您可以將其作為適當類型的記錄(例如newrow tablename%ROWTYPE
)進行newrow tablename%ROWTYPE
。
http://www.postgresql.org/docs/current/static/plpgsql-declarations.html
也就是說,除非您運行在整個觸發器函數中使用其結果的巨型查詢,否則將觸發器分成較小的部分通常比調用子函數imho更干凈。 請注意,您可以有條件地執行觸發器,例如:
create trigger "01_do_stuff_upd" on update after tablename
for each row
when (old.field <> new.field and ...)
execute procedure do_stuff_upd_part_01();
進行上述操作時要記住的一點是,在Postgres(與sql規范相反)中,觸發器以字母順序而不是創建順序執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.