不使用Debezium,记录PostgreSQL中的数据的数据前后变化
如果不使用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)实现。
作者:过错
出处:http://www.cnblogs.com/wang2650/
关于作者:net开发做的久而已。十余年时光虚度!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:wang2650@163.com
联系我,非常感谢。