
你是否在做数据同步项目,是否想自己实现数据变更的捕获?
之前写过一篇简要介绍 用Java获取PostgreSQL变更数据 的文章,由于有小伙伴自己进行测试的时候有问题,这里给出完整的程序代码,源代码已上传到 github,具体连接见文末。
一、基础知识
PostgreSQL数据库提供了两种复制方式:物理复制和逻辑复制。
1、物理复制
物理复制是指将主库 WAL 日志的日志页直接发到备机,备机完全应用的一种复制方式。
2、逻辑复制
PostgreSQL 逻辑复制是事务级别的复制,使用订阅复制槽技术,通过在订阅端回放 WAL 日志中的逻辑条目。物理复制和逻辑复制有各自的适用场景以及优缺点,这部分不是本篇讨论范围。
本篇我们主要介绍如何通过 Java 程序,实现 PostgreSQL 的逻辑复制。
二、PostgreSQL 配置
要使用 PostgreSQL 的逻辑复制功能,首先需要对数据库进行相应的配置以支持逻辑复制功能。
1、修改 postgres.conf
在 postgres.conf 中加入以下配置项。
修改完毕后 重启 PostgreSQL 数据库,使参数生效。
wal_level = logicalmax_wal_senders = 10max_worker_processes = 10max_replication_slots = 10
2、在 PostgreSQL 数据库中创建复制账号
假设 账号和密码均为:repuser
CREATE USER repuser REPLICATION LOGINCONNECTION LIMIT 8 ENCRYPTED PASSWORD 'repuser';
三、修改 Java 程序中的数据库连接
1、编辑 PostgresConnection.java 文件中的数据库连接信息
private static String URL = "jdbc:postgresql://localhost:5432/postgres";private static String USERNAME = "repuser";private static String PASSWORD = "repuser";
2、启动测试
运行 PgReplicationDBTest 项目中的 PgReplicationTest.java 类中的,在启动完成后,在数据库表中插入数据即可。
例如在数据库中插入一条数据执行如下SQL:
insert into test (id, name) values ('4','d');
程序会输出如下内容:
BEGIN 1051table public.test: INSERT: id[character varying]:'4' name[character varying]:'d'COMMIT 1051 (at 2024-06-03 19:07:34.927343+08)
完整源码已上传到 github,有需要的小伙伴可以移步下面的连接或点击原文链接:
源码链接:https://github.com/fiyo/PgReplication-DBTest
5月18号TiDB社区走进360|聊聊全球视野下的TiDB应用实践!阵容超强大!想要get降本增效大佬秘籍的TiDBer快报名! Oracle 23c 中使用注解 Oracle 23 ai 中 SUM 和 AVG 聚合函数与 INTERVAL 数据类型一起使用 Oracle Control File中的SECTION NUMBERS什么意思? 北纬36度线上的神奇的小城——诸城 诸城方言 自制数字人播报视频 信息系统项目管理师学习笔记(一) Oracle 23c 中列默认值定义为 DEFAULT ON NULL FOR INSERT AND UPDATE Oracle 数据库中的数据质量运算符 在Sybase的Syslogs中我怎么确定Secondary Truncation Point OGG将Oracle的Number数据类型映射为Sybase的Timestamp或者Varbinary 数据类型 Oracle 23c 中的 DBMS_HCHECK 包 在这个喧嚣的世界里,我们都是匆匆过客 如果有一天我不在了(AI音乐创作) OpenAI推出Sora:用AI生成高清视频的魔法工具 香港自由行-游记 软考高项学习笔记 | 一文概括高项49个项目管理过程主要知识点 Oracle Control File中的SECTION NUMBERS什么意思? Windows下Oracle的systimestamp函数的最高精度问题 Oracle Adaptive Plans新特性的个人理解




