tcn — триггерная функция для уведомления об изменениях в таблице
Эта страница переведена при помощи нейросети GigaChat.
Модуль tcn
предоставляет специальную триггерную функцию, предназначенную для отправки уведомлений слушателям обо всех изменениях, происходящих в таблице, к которой данная функция привязана. Триггер должен быть объявлен как AFTER FOR EACH ROW
.
Этот модуль классифицируется как «надежен», следовательно, его могут устанавливать обычные пользователи, имеющие право CREATE
на текущей базе данных.
Дополнительно функция допускает передачу единственного необязательного аргумента в команде CREATE TRIGGER
. Если аргумент задан, он будет использован в качестве имени канала уведомлений. Если аргумент пропущен, именем канала по умолчанию будет tcn
.
Сообщения уведомлений содержат следующую информацию:
- название таблицы;
- букву, обозначающую операцию (
INSERT
,UPDATE
илиDELETE
); - парные значения «название столбца / значение» для каждого атрибута первичного ключа.
Отдельные фрагменты уведомления разделяются запятыми. Названия таблиц и столбцов всегда заключаются в двойные кавычки, а значения данных — в одинарные. Вложенные кавычки дублируются для корректного синтаксического анализа.
Ниже приведен короткий пример использования этого расширения.
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.