如何编写PostgreSQL逻辑解码插件

这篇文章主要讲解了“如何编写PostgreSQL逻辑解码插件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写PostgreSQL逻辑解码插件”吧!

创新互联建站是一家专业提供昌邑企业网站建设,专注与成都网站建设、网站设计、HTML5、小程序制作等业务。10年已为昌邑众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

1、以逻辑复制插件为例,先看一下它是怎么运行的:

创建逻辑槽,默认使用test_decoding插件:

pg_recvlogical --create-slot -S test_slot -d flying

可以根据需要指定其他解码插件,参数-P, --plugin=PLUGIN,更多信息 pg_recvlogical --help

查看一下

flying=# select * from pg_replication_slots;
 slot_name |    plugin     | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn
-----------+---------------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
 test_slot | test_decoding | logical   |  12635 | flying   | f         | f      |            |      |          926 | 0/F05CA448  | 0/F05CA480

开始逻辑复制,这里直接打印到标准输出

pg_recvlogical --start -S test_slot -d flying -f -

 给表a(col1 int)插入一条数据:insert into a values(100); 接收端开始输出:

quanzl-mac:bin quanzl$ ./pg_recvlogical --start -S test_slot -d flying -f -
BEGIN 926
table public.a: INSERT: col1[integer]:100
COMMIT 926

这个插件更多是演示功能,有人解析它的结果用在生产环境,也是没问题的。新版本还有一个可以参考的插件pgoutput,源代码在src/backend/replication/pgoutput。

2、阅读理解代码,我们可以知道各部分怎样实现

(1)、初始化时设置回调函数 _PG_output_plugin_init

结合文档,理解结构体OutputPluginCallbacks各成员分别代表什么,即使没有注释也很容易理解。

(2)、复制启动参数

pg_recvlogical允许通过 -o 传递参数给插件,从startup_cb可以学习到如何定义我们自己需要的选项。

(3)、各动作解码,四种:begin、change、truncate、commit

尤其change动作,如何区分 INSERT/UPDATE/DELETE,包括如何正确引用对象名,识别空和TOAST,识别已删除字段等等。

(4)、还有一些test_decoding没用到的功能,比如如何找到复制键,默认为主键,也可以通过SQL命令设置:ALTER TABLE ...  REPLICA IDENTITY ...

这种怎么办呢?打开与此有关的头文件,include/replication 下,根据注释和名字可以发现它就是 RelationGetReplicaIndex函数。

感谢各位的阅读,以上就是“如何编写PostgreSQL逻辑解码插件”的内容了,经过本文的学习后,相信大家对如何编写PostgreSQL逻辑解码插件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:如何编写PostgreSQL逻辑解码插件
分享网址:http://scyanting.com/article/pssiop.html