Перейти к основному содержимому

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.