2015-10-29 70 views
2

我有一個表needitems如下:如何給PostgreSQL中的觸發函數提供參數?

itemid qty 
    5  10 
    3  20 

我寫了一個觸發器,在插入/更新/刪除將複製記錄並保存在一個表日誌:neededitems_log

事情是,我也需要知道productid。這些信息在插入/更新/刪除功能中是可變的...但是在觸發器中,我無法訪問它。插入/更新/刪除的函數如何將一個變量傳遞給觸發器? 如果它不能做我能做什麼?

與上面的例子...

假設函數X做了更新上的itemid從數量10的productid 5555的數量15 ...我想 neededitems_log顯示:

itemid qty productid 
    5  15 5555 

回答

0

您無法動態地將參數傳遞給觸發器。使用任何清潔機制都是不可能的。有幾個醜陋的方法 - 會話變量和其他,但我不能建議。當你感覺觸發器需要額外的參數時,那麼你的設計是錯誤的。所以不這樣做

當觸發器很亮時觸發器很好 - 觸發器應該主要用於檢查和審計。當你需要更復雜的工作時,你應該使用經典功能。函數的參數化要強得多,可維護性要好得多。過於複雜的觸發器是位陷阱,通常很大的失敗。

如果你真的需要它 - 那麼會話變量比其他醜陋的解決方案少錯:

postgres=# do $$ 
begin 
    perform set_config('custom.var1', 10::text, true); 
    raise notice 'session variable var1 = %', current_setting('custom.var1'); 
end; 
$$; 
NOTICE: 00000: session variable var1 = 1 
DO 
相關問題