PostgreSQL10另一重量级新特性为逻辑复制(Logical Replication),流复制是基于实例级别的复制,相当于主库的一个热备,也就是说备库的数据库对象和主库一模一样,而逻辑复制是基于表级别的选择性复制,例如可以复制主库的一部分表到备库,这是一种粒度更细的复制。
物理复制也叫流复制,流复制的原理是主库把WAL发送给备库,备库接收WAL后,进行重放。
流复制是基于WAL日志的物理复制,其原理是主库不间断地发送WAL日志流到备库,备库接收主库发送的WAL日志流后应用WAL;而逻辑复制是基于逻辑解析(logical decoding),其核心原理是主库将WAL日志流解析成一定格式,订阅节点收到解析的WAL数据流后进行应用,从而实现数据同步,逻辑复制并不是使用WAL原始日志文件进行复制,而是将WAL日志解析成了一定格式。
在逻辑复制中把主库称为源端库,备库称为目标端数据库,源端数据库根据预先指定好的逻辑解析规则对WAL文件进行解析,把DML操作解析成一定的逻辑变化信息(标准SQL语句),源端数据库把标准SQL语句发给目标端数据库,目标端数据库接收到之后进行应用,从而实现数据同步。
流复制要求主备库的大版本一致,逻辑复制可以跨大版本的数据同步,也可以实现异构数据库的数据同步。
流复制的主库可读写,从库只允许读,逻辑复制的目标端数据库要求可读写
流复制是对实例级别的复制(整个postgresql数据库),逻辑复制是选择性的复制一些表,所以是对表级别的复制。
流复制有主库的DDL、DML操作,逻辑复制只有DML操作。