2015-06-01 82 views
0

我是PostgreSQL的新手,想知道是否有一種方法可以爲插入和更新操作創建一個可以從多個表中調用的觸發器函數?從多個表中調用的動態觸發器函數POSTGRESQL

+1

是的,這是可能的,參見例如。這裏:https://wiki.postgresql.org/wiki/Audit_trigger_91plus –

+0

感謝您的鏈接。在我的情況下,我有20個主表和20個臨時表。 在主表上插入或更新數據時,應在各自的臨時表上插入/更新數據。我可以通過創建一個觸發器函數並從不同的表中調用它來完成此操作嗎? – Sam

回答

1

是的,您可以創建一個觸發器過程並從不同的表中調用它。從觸發過程中,您可以訪問幾個特殊變量,這些變量提供有關稱爲觸發器的表的元數據,即TG_TABLE_NAMETG_TABLE_SCHEMA。使用這些元數據,您可以準確定義觸發器必須執行的操作,具體取決於調用哪個表。

documentation

TG_TABLE_NAME數據類型名稱;引起 觸發器調用的表的名稱。

TG_TABLE_SCHEMA數據類型名稱;導致觸發器調用的表的 模式的名稱。

可變TG_OP提供一種導致調用該觸發器的動作:

TG_OP數據類型文本;一個INSERT,UPDATE,DELETE或TRUNCATE字符串,告訴觸發器觸發了哪個操作。

其他非常有用的特殊變量是NEWOLD。它們包含通過數據庫操作更改的舊數據和新數據:

NEW數據類型RECORD;在行級觸發器中保存新數據庫行的變量爲 INSERT/UPDATE操作。在語句級觸發器和DELETE操作中未分配此變量 。

OLD數據類型RECORD;在行級觸發器中保留舊數據庫行的變量 UPDATE/DELETE操作。在語句級觸發器和INSERT操作中未分配此變量 。