39.3. ТÑиггеÑнÑе ÑÑнкÑии ÑобÑÑий на ÑзÑке C
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑе деÑали инÑеÑÑейÑа Ð´Ð»Ñ ÑобÑÑийнÑÑ ÑÑиггеÑнÑÑ ÑÑнкÑий. ÐÑа инÑоÑмаÑÐ¸Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð° ÑолÑко пÑи ÑазÑабоÑке ÑобÑÑийнÑÑ ÑÑиггеÑнÑÑ ÑÑнкÑий ÑобÑÑий на ÑзÑке C. ÐÑи иÑполÑзовании ÑзÑка более вÑÑокого ÑÑÐ¾Ð²Ð½Ñ ÑÑи деÑали не виднÑ. РболÑÑинÑÑве ÑлÑÑаев ÑÑÐ¾Ð¸Ñ ÑаÑÑмоÑÑеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑоÑедÑÑного ÑзÑка, пÑежде Ñем наÑаÑÑ ÑазÑабаÑÑваÑÑ ÑобÑÑийнÑе ÑÑиггеÑÑ Ð½Ð° C. РдокÑменÑаÑии по ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¿ÑоÑедÑÑÐ½Ð¾Ð¼Ñ ÑзÑÐºÑ Ð¾Ð±ÑÑÑнÑеÑÑÑ, как ÑоздаваÑÑ ÑобÑÑийнÑе ÑÑиггеÑÑ Ð½Ð° ÑÑом ÑзÑке.
ТÑиггеÑнÑе ÑÑнкÑии ÑобÑÑий Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ Â«version 1» инÑеÑÑейÑа диÑпеÑÑеÑа ÑÑнкÑий.
Ðогда ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ð´Ð¸ÑпеÑÑеÑом ÑÑиггеÑов ÑобÑÑий, ей не пеÑедаÑÑÑÑ Ð¾Ð±ÑÑнÑе аÑгÑменÑÑ, но пеÑедаÑÑÑÑ ÑказаÑÐµÐ»Ñ Â«context», ÑÑÑлаÑÑийÑÑ Ð½Ð° ÑÑÑÑкÑÑÑÑ EventTriggerData. ФÑнкÑии на C могÑÑ Ð¿ÑовеÑиÑÑ Ð²ÑÐ·Ð²Ð°Ð½Ñ Ð»Ð¸ они диÑпеÑÑеÑом ÑÑиггеÑов ÑобÑÑий или Ð½ÐµÑ Ð²Ñполнив макÑоÑ:
CALLED_AS_EVENT_TRIGGER(fcinfo)
коÑоÑÑй ÑазвоÑаÑиваеÑÑÑ Ð²:
EventTriggerData ÐÑли возвÑаÑаеÑÑÑ Ð¸ÑÑина, Ñо fcinfo->context можно безопаÑно пÑивеÑÑи к ÑÐ¸Ð¿Ñ EventTriggerData * и иÑполÑзоваÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑÑкÑÑÑÑ EventTriggerData. ФÑнкÑÐ¸Ñ Ð½Ðµ должна изменÑÑÑ ÑÑÑÑкÑÑÑÑ EventTriggerData или лÑбÑе даннÑе, коÑоÑÑе на Ð½ÐµÑ ÑказÑваÑÑ.
struct EventTriggerData опÑеделена в commands/event_trigger.h:
typedef struct EventTriggerData
{
NodeTag type;
const char *event; /* Ð¸Ð¼Ñ ÑобÑÑÐ¸Ñ */
Node *parsetree; /* деÑево ÑазбоÑа */
CommandTag tag; /* Ñег ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ */
} EventTriggerData;Ñо ÑледÑÑÑими Ñленами ÑÑÑÑкÑÑÑÑ:
typeÐÑегда
T_EventTriggerData.eventÐпиÑÑÐ²Ð°ÐµÑ ÑобÑÑие, Ð´Ð»Ñ ÐºÐ¾ÑоÑого вÑзÑваеÑÑÑ ÑÑнкÑиÑ. ÐозможнÑе знаÑениÑ:
"ddl_command_start","ddl_command_end","sql_drop","table_rewrite". СÑÑÑ ÑÑÐ¸Ñ ÑобÑÑий опиÑÑваеÑÑÑ Ð² Разделе 39.1.parsetreeУказаÑÐµÐ»Ñ Ð½Ð° деÑево ÑазбоÑа командÑ. ÐеÑали можно поÑмоÑÑеÑÑ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ коде Postgres Pro. СÑÑÑкÑÑÑа деÑева ÑазбоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° без пÑедÑпÑеждений.
tagТег командÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑой ÑÑабоÑал ÑÑÐ¸Ð³Ð³ÐµÑ ÑобÑÑиÑ. ÐапÑимеÑ
"CREATE FUNCTION".
ФÑнкÑÐ¸Ñ ÑÑиггеÑа ÑобÑÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° возвÑаÑаÑÑ ÑказаÑÐµÐ»Ñ NULL (но не SQL знаÑение null, Ñо еÑÑÑ Ð½Ðµ нÑжно ÑÑÑанавливаÑÑ isNull в иÑÑинÑ).