PostgreSQL发布/订阅
背景
PostgreSQL 从2010年发布的9.0开始支持流式物理复制,从此备库可以作为只读库打开(使用的同时不堵塞实时流式恢复(自带冲突检测和处理机制)),提供给用户只读使用。
从2014年发布的9.4开始,PostgreSQL具备了流式逻辑复制的能力,有很多第三方的插件可以选择,2017年,不再需要这些插件了,因为PG已经把逻辑复制的功能加入了10的内核。
物理复制的好处
1. 物理层面完全一致,这是许多商业数据库的惯用手段。例如Oracle的DG。
2. 延迟低,事务执行过程中产生REDO record,实时的在备库apply,事务结束时,备库立马能见到数据。不论事务多大,都一样。
3. 物理复制的一致性、可靠性达到了金融级的需求,不必担心数据逻辑层面不一致。
但是物理复制要求主备块级完全一致,所以有一些无法覆盖的应用场景,例如备库不仅要只读,还要可写。又比如备库不需要完全和主库一致,只需要复制部分数据,或者备库要从多个数据源复制数据,等等。
物理复制无法覆盖的场景
1. 数据库实例的部分,例如单个数据库或者某些表的复制需求。
例如某个游戏业务,账号体系是一套数据库,如果各地有多个接入点,全部都连到中心数据库进行认证可能不太科学。那么就希望将登陆需要用到的一些数据表同步到多个数据中心,而不是整个数据库实例。
2. 数据到达subcriber后,针对不同数据,设置触发器。
3. 将多个数据库实例的数据,同步到一个目标数据库。
例如多个数据库同步到一个大的数据仓库。
4. 在不同的数据库版本之间,复制数据。
5. 将一个数据库实例的不同数据,复制到不同的目标库。
例如省级数据库的数据,按地区划分,分别复制到不同的地区。
6. 在多个数据库实例之间,共享部分数据。
例如某个业务按用户ID哈希,拆分成了8个数据库,但是有些小的维度表,需要在多个数据库之间共享。
以上场景是物理复制无法覆盖的。
逻辑复制应运而生,实际上,从2014年发布的9.4版本开始,PostgreSQL就支持逻辑复制了,只是一直没有将其引入内核。
postgresql 10.0,将会在内核层面支持基于REDO流的逻辑复制。
另一个好消息是,你可以针对同一个数据库实例,同时使用逻辑复制和物理复制,因为他们都是基于REDO的。
以上基本是抄的~~~
下面进入正题,看看具体怎么玩这个逻辑复制
发布:就是提供数据的服务器
1.建一张测试表
CREATE TABLE master.test001 (
id integer NOT NULL,
"name" text,
addtime timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
/* Keys */
CONSTRAINT test001_pkey
PRIMARY KEY (id)
) WITH (
OIDS = FALSE
);
相关文章