Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

PostgreSQL12.2帮助手册v1.0 PDF 下载


分享到:
时间:2020-07-30 16:34来源:http://www.java1234.com 作者:小锋  侵权举报
PostgreSQL12.2帮助手册v1.0 PDF 下载
失效链接处理
PostgreSQL12.2帮助手册v1.0 PDF 下载

本站整理下载:
 
相关截图:
 
主要内容:

48.6.4.8. 通用消息回调
只要一个逻辑解码消息被解码出来,可选的message_cb回调就会被调用。
typedef void (*LogicalDecodeMessageCB) (struct LogicalDecodingContext *ctx,
 ReorderBufferTXN *txn,
 XLogRecPtr message_lsn,
 bool transactional,
 const char *prefix,
 Size message_size,
 const char *message);
txn参数包含关于该事务的元信息,如被提交的时间戳和 XID。不过要注意,当消息是非事
务性的并且记录该消息的事务中还没有被分配 XID 时,这个参数可以为 NULL。lsn是该消息
的 WAL 位置。transactional说明该消息是否为事务性的。prefix是一个任意的空终结的前
缀,它当前插件被用来标识感兴趣的消息。最后的message参数保存着大小
为message_size的消息。
应该格外小心确保输出插件用于标识感兴趣消息的前缀是唯一的。建议使用扩展或者输出插
件本身的名称。
48.6.5. 用于产生输出的函数
在begin_cb、commit_cb或者 change_cb回调中,为了实际产生输出, 输出插件可以把数
据写入到ctx->out中的 StringInfo输出缓冲区中。在写出到输出缓冲区之前,必须先 调
用OutputPluginPrepareWrite(ctx, last_write),在完 成写入到缓冲区后,必须调用
OutputPluginWrite(ctx, last_write)来执行写出。 last_write指出一次特定的写出是否为
该回调的最后 一次写出。
下面的例子展示了如何把数据输出给一个输出插件的消费者:
OutputPluginPrepareWrite(ctx, true);
appendStringInfo(ctx->out, "BEGIN %u", txn->xid);
OutputPluginWrite(ctx, true);
48.7. 逻辑解码输出写入器
可以为逻辑解码增加更多输出方法。详情可见 src/backend/replication/logical/
logicalfuncs.c。 本质上,需要提供三个函数:一个读取 WAL,一个准备写输出,另一个写
输出( 见第 48.6.5 节)。
48.8. 逻辑解码的同步复制支持
逻辑解码可以被用来构建 同步复制方案,该方案 具有和流复制的同步复制 相同的用户接
口。要这样做,流复制接口(见 第 48.3 节)必须被用来流式传出数据。 正如流复制客户
端所作的一样,逻辑解码的客户端必须发出 后备机状态更新 (F) (见第 52.4 节)消息。
注意
一个通过逻辑解码接收更改的同步复制机将工作在一个单一数据库的范围内。
因为与之相反,synchronous_standby_names 当前是服务器范围的,这意味着
如果有多于一个数据库被活跃地使用,这种技术将 无法正常工作。
1251
第 49 章 复制进度追踪
复制源是为了更容易地在逻辑解码 上实现逻辑复制解决方案而设计。它们提供了对两种常
见问题的解决方案:
• 如何安全地跟踪复制进度?
• 如何基于一行的来源更改复制行为?例如,阻止双向复制 设置中的循环
复制源只有两个属性,名称和 OID。名称应该可以被用来在系统间引用该源, 它是一种自由
形式的文本。为了避免复制源之间的冲突,可以 在复制源的名称前加上复制解决方案的名
称。在空间效率很重要的情况下,OID 被用来避免不得不存储长版本。OID 不能在系统间被
共享。
可以使用函数 pg_replication_origin_create()创建复制源,使用函数
pg_replication_origin_drop()删除复制源,并且在系统目录 pg_replication_origin中查
看复制源。
构建一套复制解决方案的一个重要部分是以一种安全的方式跟踪重放进度。当应用 过程或
者整个集簇死掉时,需要能够找出数据被成功地复制到了什么地方。对此的 简单解决方案
(例如为每一个被重放的事务更新一个表行)有运行时负荷和数据库 膨胀的问题。
通过使用复制源,一个会话可以被标记为从一个远程节点重放(使用
pg_replication_origin_session_setup()函数)。此外, 可以使用
pg_replication_origin_xact_setup()以每一个事务为基础配置每一个源事务的 LSN和提
交时间戳。如果完成这样的配置, 复制过程将保持在一种对崩溃安全的方式中。所有复制
源的重放进度可以在 pg_replication_origin_status 视图中看到。一个源的进度
(例如在继续复制时)可以使用 pg_replication_origin_progress()(用于任何源)或者
pg_replication_origin_session_progress() (用于在当前会话中配置的源)获得。
在比从一个系统复制到另一个系统更复杂的复制拓扑中,另一个问题是很难避免再次 复
制已经被重放的行。这可能导致复制中的循环和低效。复制源提供了一种可选的机制 来
识别和阻止这种问题。在使用前一段提到的函数配置时,每一个被传递 给输出插件回调
(见第  48.6  节)的由该会话 生成的改变和事务会被标记上该会话的复制源。这使得可
以在输出插件中以不同的方式 对待它们,例如忽略除本地生成的行之外的所有行。此外,
filter_by_origin_cb回调可以被用来基于来源过滤逻辑 解码改变


 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐