postgresql中有兩種觸發器:語句級觸發器和行級觸發器
語句級觸發器:指執行每個SQL時只執行一次。關鍵字 for each statement。
行級觸發器:指每行都會執行一次。關鍵字for each row。
大部分情況下,我們使用的都是行級觸發器,某些特殊業務需求可能會用到語句級觸發器。
對於pl/pgSQL觸發器函數來說,系統在調用它的時候,會開聲明段裏自動創建幾個特殊的變量:
NEW:數據類型是record。在insert、update操作觸發時存儲新的數據行。
OLD:數據類型是record。在update、delete操作觸發時存儲舊的數據行。
TG_NAME:數據類型是name。觸發器名稱。
TG_WHEN:內容爲"BEFORE"或“AFTER”,可以用來判斷是BEFORE觸發器還是AFTER觸發器。
TG_LEVEL:內容爲“ROW”或“STATEMENT”,可以用來判斷是語句級觸發器還是行級觸發器。
TG_OP:內容爲“INSERT”、“UPDATE”、“DELETE”、“TRUNCATE”,用於指定DML語句類型。
TG_RELID:觸發器所在表的 oid。
TG_TABLE_NAME:觸發器所在表的表名稱。
TG_SCHEMA_NAME:觸發器所在表的模式。
TG_NARGS:在創建觸發器語句中賦予觸發器過程的參數個數。
TG_ARGV[]:text類型的一個數組。創建觸發器語句中指定的參數。
postgresql從9.3開始支持事件觸發器,也就是DDL觸發器。目前有以下三種:
ddl_command_start、ddl_command_end、sql_drop。
分別對應DDL開始執行前、執行後,以及刪除數據庫對象前觸發。
且這種觸發器很危險,只有超級管理員纔可以創建。不常用,備查。