tcn

用触发器通知变更

概览

扩展包名版本分类许可证语言
tcn1.0FUNCPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
4920tcn-
相关扩展pg_idkit pgx_ulid pg_uuidv7 permuteseq pg_hashids sequential_uuids topn quantile

版本

PG18PG17PG16PG15PG14
1.01.01.01.01.0

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION tcn;

用法

tcn: 通过 LISTEN/NOTIFY 触发变更通知

提供在行变更时发送 NOTIFY 事件的触发器函数,携带变更行信息,实现异步变更跟踪。

CREATE EXTENSION tcn;

触发器函数

函数说明
triggered_change_notification()行变更时发送携带主键信息的 NOTIFY 通知

可选参数:自定义频道名称(默认为 tcn)。

通知载荷格式

"table_name",operation,"column"='value',"column"='value'

操作类型:I(INSERT)、U(UPDATE)、D(DELETE)。

示例

CREATE TABLE tcndata (
  a int NOT NULL,
  b date NOT NULL,
  c text,
  PRIMARY KEY (a, b)
);

-- 附加触发器
CREATE TRIGGER tcndata_tcn
  AFTER INSERT OR UPDATE OR DELETE ON tcndata
  FOR EACH ROW
  EXECUTE FUNCTION triggered_change_notification();

-- 监听通知
LISTEN tcn;

-- 变更会触发通知:
INSERT INTO tcndata VALUES (1, '2024-01-01', 'test');
-- 通知: "tcndata",I,"a"='1',"b"='2024-01-01'

UPDATE tcndata SET c = 'updated' WHERE a = 1;
-- 通知: "tcndata",U,"a"='1',"b"='2024-01-01'

DELETE FROM tcndata WHERE a = 1;
-- 通知: "tcndata",D,"a"='1',"b"='2024-01-01'

-- 使用自定义频道名称
CREATE TRIGGER my_trigger
  AFTER INSERT OR UPDATE OR DELETE ON my_table
  FOR EACH ROW
  EXECUTE FUNCTION triggered_change_notification('my_channel');

最后修改 2026-03-12: update extension pages (f579993)