CREATE EVENT TRIGGER
CREATE EVENT TRIGGER â ÑоздаÑÑ ÑобÑÑийнÑй ÑÑиггеÑ
СинÑакÑиÑ
CREATE EVENT TRIGGERимÑONÑобÑÑие[ WHENпеÑеменнаÑ_ÑилÑÑÑаIN (знаÑение_ÑилÑÑÑа[, ... ]) [ AND ... ] ] EXECUTE PROCEDUREимÑ_ÑÑнкÑии()
ÐпиÑание
CREATE EVENT TRIGGER ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑобÑÑийнÑй ÑÑиггеÑ. ФÑнкÑÐ¸Ñ ÑÑиггеÑа вÑполнÑеÑÑÑ, когда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñказанное ÑобÑÑие и ÑдовлеÑвоÑÑеÑÑÑ ÑвÑзанное Ñ ÑÑиггеÑом ÑÑловие WHEN (еÑли Ñакое имееÑÑÑ). Ðа вводной инÑоÑмаÑией по ÑÑиггеÑам обÑаÑиÑеÑÑ Ðº Ðлаве 36. ÐладелÑÑем ÑÑиггеÑа ÑÑановиÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐµÐ³Ð¾ ÑоздавÑий.
ÐаÑамеÑÑÑ
имÑÐмÑ, назнаÑаемое Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑÑиггеÑÑ. ÐÑо Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ ÑникалÑнÑм в базе даннÑÑ .
ÑобÑÑиеÐÐ¼Ñ ÑобÑÑиÑ, пÑи коÑоÑом ÑÑабаÑÑÐ²Ð°ÐµÑ ÑÑÐ¸Ð³Ð³ÐµÑ Ð¸ вÑзÑваеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑиÑ. ÐодÑобнее об Ð¸Ð¼ÐµÐ½Ð°Ñ ÑобÑÑий можно ÑзнаÑÑ Ð² Разделе 36.1.
пеÑеменнаÑ_ÑилÑÑÑаÐÐ¼Ñ Ð¿ÐµÑеменной, пÑименÑемой Ð´Ð»Ñ ÑилÑÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑобÑÑий. ÐÑо Ñказание позволÑÐµÑ Ð¾Ð³ÑаниÑиÑÑ ÑÑабаÑÑвание ÑÑиггеÑа подмножеÑÑвом ÑлÑÑаев, в коÑоÑÑÑ Ð¾Ð½ поддеÑживаеÑÑÑ. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÐµÐ´Ð¸Ð½ÑÑвенно возможное знаÑение паÑамеÑÑа
пеÑеменнаÑ_ÑилÑÑÑаâTAG.знаÑение_ÑилÑÑÑаСпиÑок знаÑений ÑвÑзанного паÑамеÑÑа
пеÑеменнаÑ_ÑилÑÑÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑÑабаÑÑваÑÑ ÑÑиггеÑ. ÐÐ»Ñ Ð¿ÐµÑеменнойTAGÑÑо ÑпиÑок меÑок команд (напÑимеÑ,'DROP FUNCTION').имÑ_ÑÑнкÑииÐÐ°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑзоваÑелем ÑÑнкÑиÑ, обÑÑÐ²Ð»ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº ÑÑнкÑÐ¸Ñ Ð±ÐµÐ· аÑгÑменÑов и возвÑаÑаÑÑÐ°Ñ Ñип
event_trigger.
ÐамеÑаниÑ
СоздаваÑÑ ÑобÑÑийнÑе ÑÑиггеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
СобÑÑийнÑе ÑÑиггеÑÑ Ð½Ðµ вÑзÑваÑÑÑÑ Ð² однополÑзоваÑелÑÑком Ñежиме (Ñм. postgres). ÐÑли оÑибоÑнÑй ÑобÑÑийнÑй ÑÑÐ¸Ð³Ð³ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовал ÑабоÑÑ Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ Ñак, ÑÑо даже ÑдалиÑÑ ÐµÐ³Ð¾ нелÑзÑ, пеÑезапÑÑÑиÑе ÑеÑÐ²ÐµÑ Ð² однополÑзоваÑелÑÑком Ñежиме и ÑÑо можно бÑÐ´ÐµÑ ÑделаÑÑ.
ÐÑимеÑÑ
ТÑиггеÑ, запÑеÑаÑÑий вÑполнение лÑбой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DDL:
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'команда % оÑклÑÑена', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE PROCEDURE abort_any_command();
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ CREATE EVENT TRIGGER оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.