温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何编写PostgreSQL逻辑解码插件

发布时间:2021-11-15 16:40:54 来源:亿速云 阅读:133 作者:iii 栏目:大数据

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

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逻辑解码插件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI