postgresql觸發器函數中的一些特殊變量

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開始執行前、執行後,以及刪除數據庫對象前觸發。

且這種觸發器很危險,只有超級管理員纔可以創建。不常用,備查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章