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

我正在研究 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表的事实,但我想这不是严重的限制.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...