

# 使用 Aurora 进行 PostgreSQL 逻辑复制的概述
<a name="AuroraPostgreSQL.Replication.Logical"></a>

通过将 PostgreSQL 的逻辑复制功能与 Aurora PostgreSQL 数据库集群结合使用，您可以复制和同步各个表而不是整个数据库实例。逻辑复制使用发布和订阅模型将更改从源复制到一个或多个接收者。它的工作原理是使用 PostgreSQL 预写日志（WAL）中的更改记录。源或*发布者*将指定表的 WAL 数据发送给一个或多个接收者（*订阅者*），从而复制更改并使订阅者的表与发布者的表保持同步。来自发布者的一组更改使用*发布*来识别。订阅者通过创建*订阅*（用于定义与发布者数据库及其发布内容的连接）来获取更改。*复制插槽*是该方案中用于跟踪订阅进度的机制。

对于 Aurora PostgreSQL 数据库集群，WAL 记录保存在 Aurora 存储中。在逻辑复制场景中充当发布者的 Aurora PostgreSQL 数据库集群从 Aurora 存储中读取 WAL 数据，对其进行解码，然后将其发送给订阅者，以便可以将更改应用于该实例上的表。发布者使用*逻辑解码器*对数据进行解码以供订阅者使用。原定设置情况下，Aurora PostgreSQL 数据库集群在发送数据时使用原生 PostgreSQL `pgoutput` 插件。提供了其他逻辑解码器。例如，Aurora PostgreSQL 还支持将 WAL 数据转换为 JSON 的 `[wal2json](https://github.com/eulerto/wal2json)` 插件。

从 Aurora PostgreSQL 版本 14.5、13.8、12.12 和 11.17 起，Aurora PostgreSQL 使用*直写缓存*增强了 PostgreSQL 逻辑复制过程以提高性能。WAL 事务日志本地缓存在缓冲区中，以减少磁盘输入/输出量，即在逻辑解码期间从 Aurora 存储中读取。每当您对 Aurora PostgreSQL 数据库集群使用逻辑复制时，原定设置情况下使用直写缓存。Aurora 提供了多种可用于管理缓存的函数。有关更多信息，请参阅 [监控 Aurora PostgreSQL 逻辑复制直写缓存](AuroraPostgreSQL.Replication.Logical-monitoring.md#AuroraPostgreSQL.Replication.Logical-write-through-cache)。

所有当前可用的 Aurora PostgreSQL 版本都支持逻辑复制。有关更多信息，请参阅《Aurora PostgreSQL 版本注释》**中的 [Amazon Aurora PostgreSQL 更新](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)。

适用于 Aurora PostgreSQL 的 Babelfish 支持从以下版本进行逻辑复制：
+ 15.7 及更高版本
+ 16.3 及更高版本

**注意**  
除了 PostgreSQL 10 中引入的原生 PostgreSQL 逻辑复制功能外，Aurora PostgreSQL 还支持 `pglogical` 扩展。有关更多信息，请参阅 [使用 pglogical 跨实例同步数据](Appendix.PostgreSQL.CommonDBATasks.pglogical.md)。

有关 PostgreSQL 逻辑复制的更多信息，请参阅 PostgreSQL 文档中的[逻辑复制](https://www.postgresql.org/docs/current/logical-replication.html)和[逻辑解码概念](https://www.postgresql.org/docs/current/logicaldecoding-explanation.html)。

**注意**  
PostgreSQL 16 增加了对从只读副本进行逻辑解码的支持。Aurora PostgreSQL 不支持此功能。