当前位置: 首页 > news >正文

如何实现PostgreSQL对某一张表的WAL日志进行记录

PostgreSQL 没有内置的 binlog(binary log)机制像 MySQL 那样。它使用 Write-Ahead Logging (WAL) 来记录数据库的变更。要将这些变更记录到某张表中,通常可以使用逻辑复制(Logical Replication)和触发器(Triggers)来实现。以下是一个实现的思路:

1. 启用逻辑复制

首先,确保 PostgreSQL 已启用逻辑复制:
在 postgresql.conf 文件中,设置以下参数:

# 启用逻辑复制
wal_level = logical# 设置允许的最大同步槽数量
max_replication_slots = 4# 设置允许的最大订阅数量
max_wal_senders = 4

然后重启 PostgreSQL 服务:

sudo systemctl restart postgresql

2. 创建发布和订阅

1. 创建发布

在数据库中,创建一个发布:

CREATE PUBLICATION my_publication FOR TABLE my_table;

这样,my_table 的变更将会被记录并可以被订阅。

2. 创建订阅

在另一个数据库中,创建一个订阅:

CREATE SUBSCRIPTION my_subscription
CONNECTION 'dbname=mydb host=localhost user=myuser password=mypassword'
PUBLICATION my_publication;

这样,my_table 的变更将会被传输到本地的订阅数据库。

3. 使用触发器记录变更

如果你希望将变更记录到特定的表中,你可以创建触发器。以下是一个简单的示例:

  1. 创建日志表
CREATE TABLE my_table_log (id SERIAL PRIMARY KEY,operation TEXT,old_data JSONB,new_data JSONB,changed_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
  1. 创建触发器函数
CREATE OR REPLACE FUNCTION log_my_table_changes() RETURNS TRIGGER AS $$
BEGININSERT INTO my_table_log (operation, old_data, new_data)VALUES (TG_OP,row_to_json(OLD),row_to_json(NEW));RETURN NEW;
END;
$$ LANGUAGE plpgsql;
  1. 创建触发器
CREATE TRIGGER my_table_changes
AFTER INSERT OR UPDATE OR DELETE ON my_table
FOR EACH ROW
EXECUTE FUNCTION log_my_table_changes();

这样,每当 my_table 表中的数据发生变化时,触发器会将这些变更记录到 my_table_log 表中。这种方法可以记录数据库表中的变更并进行审计。

http://www.lryc.cn/news/410259.html

相关文章:

  • 机器学习数学基础(2)--最大似然函数
  • 详解 @RequestHeader 注解在 Spring Boot 中的使用
  • C# 表达式树的简介与说明
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十三章 输入子系统实验
  • [补题记录]Leetcode 15. 三数之和
  • 什么是sql注入攻击,如何预防介绍一下mysql中的常见数据类型
  • 史上最全的Seata教学并且连接springcloudAlibaba进行使用
  • InternLM Git 基础知识
  • 【Unity模型】古代亚洲建筑
  • 木马后门实验
  • 【React】useState:状态更新规则详解
  • C#中的异步编程:Task、Await 和 Async
  • SSRF-labs-master靶场
  • HBuilder X中配置vue-cli项目和UI库
  • 如何用PostMan按照规律进行循环访问接口
  • 稳态准直太阳光模拟器仪器光伏电池组件IV测试
  • vue3 reactive原理(二)-代理Set和Map及ref原理
  • Python自然语言处理库之NLTK与spaCy使用详解
  • Hive-内部表和外部表
  • Java并发编程(三)
  • Flink Doirs Connector 常见问题:Doris目前不支持流读
  • 期末复习资料——计算机系统基础
  • 一天搞定Recat(5)——ReactRouter(上)【已完结】
  • TCP/IP 网络模型详解(二)之输入网址到网页显示的过程
  • 【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法
  • SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)
  • [vue3]配置@指向src
  • 【多模态大模型】 BLIP in ICML 2022
  • Flutter开发Dart 中的 mixin、extends 和 implements
  • SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)