W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
這一節(jié)描述了事件觸發(fā)器函數(shù)接口的低層細節(jié)。只有在用 C 編寫事件 觸發(fā)器函數(shù)時才需要用到這里的信息。如果使用更高層的語言,那么 這些細節(jié)已經被處理好了。在大部分情況下都應該優(yōu)先考慮使用過程 語言來編寫你的事件觸發(fā)器。每一種過程語言的文檔都解釋了如何用 它編寫事件觸發(fā)器。
事件觸發(fā)器函數(shù)必須使用“版本 1”的函數(shù)管理器接口。
當一個函數(shù)被事件觸發(fā)器管理器調用時,向它傳遞的并不是普通參數(shù), 而是一個指向EventTriggerData
結構的 “context”指針。C 函數(shù)可以通過執(zhí)行以下宏來檢查它是否 被事件觸發(fā)器管理器調用:
CALLED_AS_EVENT_TRIGGER(fcinfo)
這個宏會被擴展為:
((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
如果這個宏返回真,那么就可以安全地把 fcinfo->context
造型為類型EventTriggerData
*
并且使用所指向的EventTriggerData
結構。 函數(shù)不能修改 EventTriggerData
結構以及它指向的任何內容。
struct EventTriggerData
在 commands/event_trigger.h
中定義:
typedef struct EventTriggerData
{
NodeTag type;
const char *event; /* 事件名稱 */
Node *parsetree; /* 解析樹 */
CommandTag tag; /* 命令標簽 */
} EventTriggerData;
其中的成員定義如下:
type
總是T_EventTriggerData
。
event
描述要為其調用這個函數(shù)的事件,可以是 "ddl_command_start"
、"ddl_command_end"
、 "sql_drop"
、"table_rewrite"
之一。 這些事件的含義請見第 39.1 節(jié)。
parsetree
該命令的解析樹的指針。其細節(jié)可以參考 PostgreSQL 的源代碼。 解析樹結構可能會在未經通知的情況下改變。
tag
與事件觸發(fā)器的事件相關聯(lián)的命令標簽,例如 "CREATE FUNCTION"
。
一個事件觸發(fā)器函數(shù)必須返回一個NULL
指針( 不是一個 SQL 空值,也就是不要把 isNull
設置為真)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: