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

tcn. Уведомления об изменениях в любой таблице

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Модуль предоставляет триггерную функцию triggered_change_notification, уведомляющую приемники уведомлений об изменениях в любой таблице, к которой привязан триггер. Функция должна использоваться в качестве триггера AFTER вида FOR EACH ROW.

Функции в операторе CREATE TRIGGER передается один необязательный параметр. Если параметр присутствует, он задает имя канала для уведомлений; при отсутствии в качестве имени канала будет назначено tcn.

Сообщение уведомления включает имя таблицы, букву, обозначающую тип выполняемой операции и пары имя столбца/значение для столбца первичного ключа. Разные части сообщения разделены запятыми. Для упрощения разбора сообщения регулярными выражениями имена таблицы и столбцов всегда заключаются в двойные кавычки, а значения данных — в апострофы. Внутренние кавычки и апострофы дублируются.

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:

CREATE EXTENSION tcn SCHEMA ext;

Настройка

Настройка не требуется.

Использование модуля

CREATE TABLE tcndata (
a INT NOT NULL,
b DATE NOT NULL,
c TEXT,
PRIMARY KEY (a, b)
);
CREATE TRIGGER tcndata_tcn_trigger
AFTER INSERT OR UPDATE OR DELETE ON tcndata
FOR EACH ROW EXECUTE FUNCTION triggered_change_notification();
listen tcn;
INSERT INTO tcndata VALUES  (1, date '2012-12-22', 'one'),
(1, date '2012-12-23', 'another'),
(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.
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.
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.

Ссылки на документацию разработчика

Исходная документация PosgreSQL по модулю tcn: https://www.postgresql.org/docs/15/tcn.html.