版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
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队列,实现消息订阅。