| ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ PostgreSQL 9.4.1 | |||
|---|---|---|---|
| ÐÑед. | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | Ðлава 37. ТÑиггеÑÑ ÑобÑÑий | След. |
37.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; /* деÑево ÑазбоÑа */
const char *tag; /* Ñег ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ */
} EventTriggerData;Ñо ÑледÑÑÑими Ñленами ÑÑÑÑкÑÑÑÑ:
- type
ÐÑегда T_EventTriggerData.
- event
ÐпиÑÑÐ²Ð°ÐµÑ ÑобÑÑие, Ð´Ð»Ñ ÐºÐ¾ÑоÑого вÑзÑваеÑÑÑ ÑÑнкÑиÑ. ÐозможнÑе знаÑениÑ: "ddl_command_start", "ddl_command_end", "sql_drop". СÑÑÑ ÑÑÐ¸Ñ ÑобÑÑий опиÑÑваеÑÑÑ Ð² Разделе 37.1.
- parsetree
УказаÑÐµÐ»Ñ Ð½Ð° деÑево ÑазбоÑа командÑ. ÐеÑали можно поÑмоÑÑеÑÑ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ коде PostgreSQL. СÑÑÑкÑÑÑа деÑева ÑазбоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° без пÑедÑпÑеждений.
- tag
Тег командÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑой ÑÑабоÑал ÑÑÐ¸Ð³Ð³ÐµÑ ÑобÑÑиÑ. ÐапÑÐ¸Ð¼ÐµÑ "CREATE FUNCTION".
ФÑнкÑÐ¸Ñ ÑÑиггеÑа ÑобÑÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° возвÑаÑаÑÑ ÑказаÑÐµÐ»Ñ NULL (но не SQL знаÑение null, Ñо еÑÑÑ Ð½Ðµ нÑжно ÑÑÑанавливаÑÑ isNull в иÑÑинÑ).
| ÐÑед. | ÐаÑало | След. |
| ÐаÑÑиÑа ÑÑабаÑÑÐ²Ð°Ð½Ð¸Ñ ÑÑиггеÑов ÑобÑÑий | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | ÐолнÑй пÑÐ¸Ð¼ÐµÑ ÑÑиггеÑа ÑобÑÑÐ¸Ñ |