开发者社区 问答 正文

RDS FOR PG如何订阅数据

rds for pg无法订阅数据变化。DTS未支持,RDS for pg也无法安装外部插件(阿里云不允许),我现在需要获取PG的数据库变化,有啥办法?

展开
收起
cai.zh 2019-01-16 09:49:37 960 分享 版权
1 条回答
写回答
取消 提交回答
  • 深耕云原生技术布道,熟悉DevOps、敏捷开发、容器技术、微服务架构等,擅长架构设计及企业数字化转型,在跨境电商场景上有多年的工作经历,在设计高并发、高性能、高可用中架构有较深的经验积累。精益和工匠精神不断提高对于技术领域的研究和探索。
    亲~ RDS For PG有多个方式订阅数据变化。

    1、触发器,将表的变更记录到一个流水表,然后业务通过读取流水表进行订阅。


    《USE hstore store table's trace record》


    2、规则,在需要订阅的表上,创建RULE,将表的变更记录到一个流水表,然后业务通过读取流水表进行订阅。


    https://www.postgresql.org/docs/10/static/sql-createrule.html


    3、异步消息,使用触发器或RULE,将表的变更写入CHANNEL。(数据库的异步消息通道功能)。


    订阅端通过监听CHANNEL,实现对数据的订阅。


    https://www.postgresql.org/docs/10/static/sql-notify.html


    https://www.postgresql.org/docs/10/static/sql-listen.html


    4、WAL 逻辑 decode。


    从9.4的版本开始,PostgreSQL支持逻辑复制,将数据变更写入WAL,(类似MySQL的binlog复制)。客户端通过从WAL翻译REDO来实现订阅。


    alidecode 是一个翻译wal的插件,用户也可以自己写翻译WAL的插件。


    《PostgreSQL 最佳实践 - 逻辑增量复制(MySQL <-> PgSQL <-> PgSQL)》


    5、PGQ ,是SKYTOOLS的一个基础功能,在PostgreSQL内部实现了一个异步的队列。用户可以对需要复制的表,创建PGQ,然后写PGQ的消费者来实现订阅。


    https://wiki.postgresql.org/wiki/SkyTools


    londiste3 就是一个用于复制的PGQ消费者代表程序。


    6、confluentinc bottledwater-pg , 基于PG的WAL以及逻辑复制功能,实现的一个主动消费者,将数据自动从WAL翻译,并写入KAFKA队列,实现消息订阅。


    2019-01-16 09:57:08
    赞同 展开评论