加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 可以使用逻辑解码来复制单个表吗?

发布时间:2020-12-13 16:14:18 所属栏目:百科 来源:网络整理
导读:我正在研究 logical decoding并且我已经能够创建一个插槽并使用 streaming replication protocol将数据库中的所有事务复制到另一个,并且它工作得非常好. 但我需要复制一个表而不是数据库中的所有表. 所以,我的问题是:逻辑解码是否允许过滤单个表的流? 我目
我正在研究 logical decoding并且我已经能够创建一个插槽并使用 streaming replication protocol将数据库中的所有事务复制到另一个,并且它工作得非常好.

但我需要复制一个表而不是数据库中的所有表.

所以,我的问题是:逻辑解码是否允许过滤单个表的流?

我目前的提示是创建一个自定义logical decoding output plugin,我错了吗?

更新

我已经构建了一个基于postgresql源的contrib / test解码的输出插件,这是一个很好的解决方法.但是它对实际用例没用,所以我决定将其他一些项目作为fork和update的引用.

对我来说最好的是wal2json,所以我决定将它分叉并添加表过滤器作为选项而不是硬编码表名.

Here是叉子和this is the changeset.

如何使用

首先使用wal2json插件创建插槽:

pg_recvlogical -d postgres –slot test_slot –create-slot -P wal2json

然后开始接收流

pg_recvlogical -d postgres –slot test_slot –start -o limit-to=table_foo,table_bar -f –

现在我们已准备好仅在table_foo和table_bar上接收更新.

这是一个非常好的挑战,我不是一个c开发人员,我知道代码需要一些优化,但是现在它比预期更好.

根据 documentation,您可以通过实现流复制 interface methods来实现自己的同步复制解决方案:
  • CREATE_REPLICATION_SLOT slot_name LOGICAL options
  • DROP_REPLICATION_SLOT slot_name
  • START_REPLICATION SLOT slot_name LOGICAL options

除了上面的界面,你还需要实现Logical Decoding Output插件.在此插件界面中,您需要调整Change Callback操作,该操作将侦听所有DML操作:

The required change_cb callback is called for every individual row
modification inside a transaction,may it be an INSERT,UPDATE,or
DELETE. Even if the original command modified several rows at once the
callback will be called individually for each row.

这是您要检查特定表以进行复制的功能.还要注意Change Callback不会处理UNLOGGEDTEMP表的事实,但我想这不是严重的限制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读