tcn
用触发器通知变更
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
tcn | 1.0 | FUNC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4920 | tcn | 否 | 是 | 否 | 是 | 是 | 否 | - |
| 相关扩展 | pg_idkit pgx_ulid pg_uuidv7 permuteseq pg_hashids sequential_uuids topn quantile |
|---|
版本
| PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|
| 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
安装
提示:这是 PostgreSQL 内核自带的 contrib 扩展
CREATE EXTENSION tcn;
用法
提供在行变更时发送 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');