F.67. tcn â ÑÑиггеÑÐ½Ð°Ñ ÑÑнкÑиÑ, ÑообÑаÑÑÐ°Ñ Ð¿ÑиÑмникам Ñведомлений об изменениÑÑ Ð² ÑодеÑжимом ÑаблиÑÑ #
ÐодÑÐ»Ñ tcn пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ ÑÑиггеÑнÑÑ ÑÑнкÑиÑ, ÑведомлÑÑÑÑÑ Ð¿ÑиÑмники Ñведомлений об изменениÑÑ
в лÑбой ÑаблиÑе, к коÑоÑой пÑивÑзан ÑÑиггеÑ. Ðна должна иÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве ÑÑиггеÑа AFTER вида FOR EACH ROW.
ÐаннÑй модÑÐ»Ñ ÑÑиÑаеÑÑÑ Â«Ð´Ð¾Ð²ÐµÑеннÑм», Ñо еÑÑÑ ÐµÐ³Ð¾ могÑÑ ÑÑÑанавливаÑÑ Ð¾Ð±ÑÑнÑе полÑзоваÑели, имеÑÑие пÑаво CREATE в ÑекÑÑей базе даннÑÑ
.
ÐÑой ÑÑнкÑии в опеÑаÑоÑе CREATE TRIGGER пеÑедаÑÑÑÑ ÑолÑко один паÑамеÑÑ, и он не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑиÑÑÑÑÑвÑеÑ, он задаÑÑ Ð¸Ð¼Ñ ÐºÐ°Ð½Ð°Ð»Ð° Ð´Ð»Ñ Ñведомлений. Ð ÑлÑÑае его оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ канала бÑÐ´ÐµÑ tcn.
СообÑение ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑаблиÑÑ, бÑквÑ, обознаÑаÑÑÑÑ Ñип вÑполнÑемой опеÑаÑии и паÑÑ Ð¸Ð¼Ñ ÑÑолбÑа/знаÑение Ð´Ð»Ñ ÑÑолбÑа пеÑвиÑного клÑÑа. ÐÐ°Ð¶Ð´Ð°Ñ ÑаÑÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾ÑделÑеÑÑÑ Ð¾Ñ ÑледÑÑÑей запÑÑой. ÐÐ»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ ÑазбоÑа ÑообÑÐµÐ½Ð¸Ñ ÑегÑлÑÑнÑми вÑÑажениÑми имена ÑаблиÑÑ Ð¸ ÑÑолбÑов вÑегда заклÑÑаÑÑÑÑ Ð² двойнÑе кавÑÑки, а знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ â в апоÑÑÑоÑÑ. ÐнÑÑÑенние кавÑÑки и апоÑÑÑоÑÑ Ð´ÑблиÑÑÑÑÑÑ.
Ðалее пÑиведена кÑаÑÐºÐ°Ñ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑаÑÐ¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑаÑÑиÑениÑ.
test=# create table tcndata test-# ( test(# a int not null, test(# b date not null, test(# c text, test(# primary key (a, b) test(# ); CREATE TABLE test=# create trigger tcndata_tcn_trigger test-# after insert or update or delete on tcndata test-# for each row execute function triggered_change_notification(); CREATE TRIGGER test=# listen tcn; LISTEN test=# insert into tcndata values (1, date '2012-12-22', 'one'), test-# (1, date '2012-12-23', 'another'), test-# (2, date '2012-12-23', 'two'); INSERT 0 3 Asynchronous notification "tcn" with payload ""tcndata",I,"a"='1',"b"='2012-12-22'" received from server process with PID 22770. Asynchronous notification "tcn" with payload ""tcndata",I,"a"='1',"b"='2012-12-23'" received from server process with PID 22770. Asynchronous notification "tcn" with payload ""tcndata",I,"a"='2',"b"='2012-12-23'" received from server process with PID 22770. test=# update tcndata set c = 'uno' where a = 1; UPDATE 2 Asynchronous notification "tcn" with payload ""tcndata",U,"a"='1',"b"='2012-12-22'" received from server process with PID 22770. Asynchronous notification "tcn" with payload ""tcndata",U,"a"='1',"b"='2012-12-23'" received from server process with PID 22770. test=# delete from tcndata where a = 1 and b = date '2012-12-22'; DELETE 1 Asynchronous notification "tcn" with payload ""tcndata",D,"a"='1',"b"='2012-12-22'" received from server process with PID 22770.