9.27. ТÑиггеÑнÑе ÑÑнкÑии
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð² PostgreSQL еÑÑÑ ÐµÐ´Ð¸Ð½ÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑÑиггеÑÐ½Ð°Ñ ÑÑнкÑиÑ, suppress_redundant_updates_trigger, коÑоÑÐ°Ñ Ð¿ÑедоÑвÑаÑÐ°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, ÑакÑиÑеÑки не влиÑÑÑие на даннÑе в ÑÑÑоке, Ñогда как обÑÑно Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑполнÑÑÑÑÑ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ñого, бÑли ли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð´Ð°Ð½Ð½Ñе. (ÐбÑÑное поведение не пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, поÑÑÐ¾Ð¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑполнÑÑÑÑÑ Ð±ÑÑÑÑее, и в ÑÑде ÑлÑÑаев именно ÑÑо поведение желаÑелÑно.)
Ридеале, ÑледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ Ð¾Ð¿ÐµÑаÑий изменениÑ, коÑоÑÑе ÑакÑиÑеÑки не менÑÑÑ Ð´Ð°Ð½Ð½Ñе в запиÑÑÑ
. ÐодобнÑе ненÑжнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¾Ð±Ñ
одиÑÑÑÑ Ð´Ð¾Ñого, оÑобенно когда ÑÑебÑеÑÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво индекÑов, к ÑÐ¾Ð¼Ñ Ð¶Ðµ впоÑледÑÑвии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑидÑÑÑÑ Ð¾ÑиÑаÑÑ Ð¾Ñ Â«Ð¼ÑÑÑвÑÑ
» ÑÑÑок. Ðднако вÑÑвиÑÑ Ñакие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² клиенÑÑком коде бÑÐ²Ð°ÐµÑ Ñложно, еÑли вообÑе возможно, а пÑи ÑоÑÑавлении ÑооÑвеÑÑÑвÑÑÑиÑ
пÑовеÑоÑнÑÑ
вÑÑажений легко допÑÑÑиÑÑ Ð¾ÑибкÑ. РкаÑеÑÑве алÑÑеÑнаÑивного ÑеÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ suppress_redundant_updates_trigger, коÑоÑÐ°Ñ Ð¾Ð¿ÑÑÐºÐ°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, не менÑÑÑие даннÑе. Ðднако иÑполÑзоваÑÑ ÐµÑ ÑледÑÐµÑ Ñ Ð¾ÑÑоÑожноÑÑÑÑ. ÐаннÑй ÑÑÐ¸Ð³Ð³ÐµÑ Ð²ÑполнÑеÑÑÑ Ð½Ðµ болÑÑое, но знаÑиÑелÑное вÑÐµÐ¼Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи, Ñак ÑÑо еÑли болÑÑинÑÑво запиÑей вÑÑ-Ñаки ÑакÑиÑеÑки изменÑÑÑÑÑ, ÑÑÐ¾Ñ ÑÑÐ¸Ð³Ð³ÐµÑ ÑкоÑее Ð·Ð°Ð¼ÐµÐ´Ð»Ð¸Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ.
ФÑнкÑÐ¸Ñ suppress_redundant_updates_trigger можно пÑивÑзаÑÑ Ðº ÑаблиÑе Ñак:
CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger();
РболÑÑинÑÑве ÑлÑÑаев ÑÑÐ¾Ñ ÑÑÐ¸Ð³Ð³ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑзÑваÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки поÑледним. Ð Ñак как ÑÑиггеÑÑ Ð²ÑзÑваÑÑÑÑ Ð¿Ð¾ поÑÑÐ´ÐºÑ ÑоÑÑиÑовки Ð¸Ñ Ð¸Ð¼Ñн, Ð¸Ð¼Ñ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ нÑжно вÑбиÑаÑÑ Ñаким, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ бÑло поÑледним ÑÑеди имÑн вÑÐµÑ ÑÑиггеÑов, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð² ÑаблиÑе.
ÐодÑобнее о Ñоздании ÑÑиггеÑов можно ÑзнаÑÑ Ð² опиÑании CREATE TRIGGER.