首页 > 数据库 >不使用Debezium,记录PostgreSQL中的数据的数据前后变化

不使用Debezium,记录PostgreSQL中的数据的数据前后变化

时间:2024-06-04 14:34:16浏览次数:13  
标签:INSERT 触发器 old data changes new PostgreSQL 数据 Debezium

如果不使用Debezium,可以使用触发器(Trigger)来记录PostgreSQL中的数据的变化。触发器是一种特殊的存储过程,当对表执行INSERT、UPDATE或DELETE操作时,会自动执行触发器中的代码。

以下是一个简单的示例,展示了如何使用触发器记录数据的变化:

1 创建一个用于存储变化记录的表:

CREATE TABLE data_changes (
    id SERIAL PRIMARY KEY,
    operation CHAR(1),
    old_data JSONB,
    new_data JSONB,
    change_time TIMESTAMP NOT NULL DEFAULT NOW()
);

2 为需要监控变化的表创建触发器函数:

CREATE OR REPLACE FUNCTION record_data_changes() RETURNS TRIGGER AS $$
DECLARE
    old_data JSONB;
    new_data JSONB;
BEGIN
    IF (TG_OP = 'DELETE') THEN
        old_data = row_to_json(OLD);
        INSERT INTO data_changes (operation, old_data) VALUES ('D', old_data);
        RETURN OLD;
    ELSIF (TG_OP = 'UPDATE') THEN
        old_data = row_to_json(OLD);
        new_data = row_to_json(NEW);
        INSERT INTO data_changes (operation, old_data, new_data) VALUES ('U', old_data, new_data);
        RETURN NEW;
    ELSIF (TG_OP = 'INSERT') THEN
        new_data = row_to_json(NEW);
        INSERT INTO data_changes (operation, new_data) VALUES ('I', new_data);
        RETURN NEW;
    END IF;
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

3 为需要监控变化的表创建触发器:

CREATE TRIGGER data_changes_trigger
AFTER INSERT OR UPDATE OR DELETE ON your_table
FOR EACH ROW EXECUTE FUNCTION record_data_changes();

此方法使用触发器,功能上能实现,但是性能有损失。

其他方法 可以使用 flink sql(推荐,需要flink。可能会需要使用java代码),Debezium (使用kafka,比较麻烦,老版本用的zk。新版可以不用zk)实现。

标签:INSERT,触发器,old,data,changes,new,PostgreSQL,数据,Debezium
From: https://www.cnblogs.com/wang2650/p/18230686

相关文章

  • Mysql实时数据监听高可用
    一、需求:数据实时监听在项目中有着重要的意义,例如某些项目需要监听数据库的变化,生成对应的元数据块,这个数据块为前端接口提供数据支撑或者数据计算使用,监听到某些数据的变化,及时提醒上游或下游服务等等。如何保证数据监听的高可用?本文用自身项目结构简易阐述,不喜勿喷。二、......
  • postgresql 用户管理
    --创建用户createuserkingron;--修改用户密码alteruserkingronwithpassword'1234';--限制用户的连接数alteruserkingronconnectionlimit1;--设置用户密码过期时间alteruserkingronvaliduntil'2024-2-2';--密码永不过期alteruserkingronvali......
  • 【数据库】StarRocks、Hive、ClickHouse、Tidb的对比及使用场景
    特性StarRocksHiveClickHouseTiDB数据存储列存储(ColumnarStorage)行存储(RowStorage)列存储(ColumnarStorage)混合存储(行存储和列存储)查询性能高低高高主要用途实时分析(Real-timeAnalytics)大数据批处理(BatchProcessing)实时分析(Real-timeAnalytics)OLTP与O......
  • 安装 postgresql
    yum安装安装PostgreSQL,postgresql-server会附带安装上postgres客户端,因此不必重复安装:yuminstallpostgresql-server检查一下版本信息:psql--version初始化数据库:postgresql-setupinitdb启动数据库:servicepostgresqlstart需要解决root用户下无法......
  • postgresql 基本语法
    模式--创建模式createschemamyschema;--设置当前模式setsearch_pathtomyschema;--查看当前数据库所有模式select*frominformation_schema.schemata;--删除模式dropschemamyschema;--删除模式以及模式下的所有表dropschemamyschemacascade;查询......
  • 如何封装小程序的数据请求方法
    平时我们在开发中也会封装数据请求的通用工具,因为有很多相同的处理,没必要每次使用都把重复的再写一遍。在微信小程序中也是一样,封装数据请求的方式可以提高代码的可维护性和复用性。创建请求模块首先,创建一个新的JavaScript文件(例如api.js),用于封装所有的数据请求。这个模块将......
  • postgresql fdw 常用操作
    fdw--安装外部服务扩展createextensionpostgres_fdw;--创建外部服务createserverpostgres_serverforeigndatawrapperpostgres_fdwoptions(host'192.168.10.188',port'1521',dbname'testdb');--修改外部服务器配置--主机、端口和database这几项连接设......
  • 7 | 史上最全大数据笔记-Hive函数
    第八章Hive函数在Hive中,函数主要分两大类型,一种是内置函数,一种是用户自定义函数。8.1Hive内置函数8.1.1函数查看 showfunctions; descfunctionfunctionName;8.1.2日期函数1)当前系统时间函数:current_date()、current_timestamp()、unix_timestamp() --函......
  • vue中集成 <el-calendar>日历控件,显示数据的状况
    vue中集成 <el-calendar>日历控件,显示数据的状况。每个日期上显示颜色方框。在 <el-calendar>控件的 <template>中处理具体的颜色显示,使用v-if函数调用处理参数,其中添加 slot-scope="{date,data}"可获取日期和数据。效果图:  参考链接:https://blog.csdn.net/wei......
  • 数据结构第四篇【再谈泛型】
    数据结构第四篇【再谈泛型】泛型泛型类的使用泛型的上界泛型方法通配符通配符上界通配符下界......