

# 配置 Aurora PostgreSQL 以进行本地写入转发
<a name="aurora-postgresql-write-forwarding-configuring"></a>

 使用以下部分，您可以为 Amazon Aurora PostgreSQL 数据库集群启用本地写入转发，配置一致性级别以及使用写入转发来管理事务。

## 启用本地写入转发
<a name="aurora-postgresql-write-forwarding-enabling"></a>

 默认情况下，Aurora PostgreSQL 数据库集群不启用本地写入转发。您在集群级别而不是在实例级别启用本地写入转发。

### 控制台
<a name="aurora-postgresql-write-forwarding-enabling.CON"></a>

 使用 AWS 管理控制台，在创建或修改数据库集群时，选中**只读副本写入转发**下的**开启本地写入转发**复选框。

### AWS CLI
<a name="aurora-postgresql-write-forwarding-enabling.CLI"></a>

 要使用 AWS CLI 启用本地写入转发，请使用 `--enable-local-write-forwarding` 选项。当您使用 `create-db-cluster` 命令创建新的数据库集群时，此选项将起作用。当您使用 `modify-db-cluster` 命令修改现有数据库集群时，它也起作用。您可以结合这些相同的 CLI 命令使用 `--no-enable-local-write-forwarding` 选项来禁用本地写入转发。

 以下示例创建了一个启用本地写入转发的 Aurora PostgreSQL 数据库集群。

```
                        aws rds create-db-cluster \
                        --db-cluster-identifier write-forwarding-test-cluster \
                        --enable-local-write-forwarding \
                        --engine aurora-postgresql \
                        --engine-version 16.4 \
                        --master-username myuser \
                        --master-user-password mypassword \
                        --backup-retention 1
```

 然后，您可以创建写入器和读取器数据库实例，以便您可以使用写入转发。有关更多信息，请参阅 [创建 Amazon Aurora 数据库集群](Aurora.CreateInstance.md)。

### RDS API
<a name="aurora-postgresql-write-forwarding-enabling.API"></a>

 要使用 Amazon RDS API 启用本地写入转发，请将 `EnableLocalWriteForwarding` 参数设置为 `true`。当您使用 `CreateDBCluster` 操作创建新的数据库集群时，此参数起作用。当您使用 `ModifyDBCluster` 操作修改现有数据库集群时，它也起作用。您可以通过将 `EnableLocalWriteForwarding` 参数设置为 `false` 来禁用本地写入转发。

### 为数据库会话启用本地写入转发
<a name="aurora-postgresql-write-forwarding-enabling-session"></a>

 `apg_write_forward.consistency_mode` 参数是启用写入转发的数据库参数和数据库集群参数。您可以为读取一致性级别指定 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF`。要了解有关一致性级别的更多信息，请参阅[Aurora PostgreSQL 中本地写入转发的一致性和隔离](#aurora-postgresql-write-forwarding-isolation)。

 以下规则适用于此参数：
+ 默认值为 `SESSION`。
+  仅当您将 `apg_write_forward.consistency_mode` 设置为 `EVENTUAL`、`SESSION` 或 `GLOBAL` 时，本地写入转发才可用。此参数仅适用于启用了本地写入转发的数据库集群的读取器实例。
+ 将该值设置为 `OFF` 将在会话中禁用本地写入转发。

## Aurora PostgreSQL 中本地写入转发的一致性和隔离
<a name="aurora-postgresql-write-forwarding-isolation"></a>

您可以控制只读副本上的读取一致性程度。您可以调整读取一致性级别，以确保会话中的所有转发的写入操作在只读副本中均可见，然后再进行任何后续查询。您还可以使用此设置来确保只读副本上的查询始终看到来自写入器数据库实例的最新更新。即使是由其他会话或其他集群提交的更新。要为应用程序指定此类行为，请为会话级别参数 `apg_write_forward.consistency_mode` 选择一个合适的值。`apg_write_forward.consistency_mode` 参数仅对启用了本地写入转发的只读副本产生影响。

**注意**  
对于 `apg_write_forward.consistency_mode` 参数，您可以指定值 `SESSION`、`EVENTUAL`、`GLOBAL` 和 `OFF`。默认情况下， 值设为 `SESSION`。将该值设置为 `OFF` 将禁用写入转发。

随着您提高一致性级别，您的应用程序会花更多时间等待更改传播到只读副本。您可以选择在较低延迟与确保运行查询之前在其他位置进行的更改完全可用之间取得平衡。

对于每种可用的一致性模式设置，效果如下所示：
+ `SESSION` – 只读副本上使用本地写入转发的会话会看到在该会话中所做的所有更改的结果。无论事务是否已提交，这些更改都是可见的。如有必要，查询将等待转发的写入操作的结果复制到当前读取器数据库实例。它不会等待在当前数据库集群内的其他会话中执行的写入操作的更新结果。
+ `EVENTUAL` – 只读副本上使用本地写入转发的查询可能会看到由于复制滞后而稍微过时的数据。在对写入器数据库实例执行写入操作并将其复制到只读副本之前，看不到同一会话中写入操作的结果。查询不会等待更新的结果可用。因此，它可能会检索较旧的数据或更新的数据，具体取决于语句的时间和复制滞后量。
+ `GLOBAL` – 只读副本上的会话会看到该会话所做的更改。它还可以查看来自写入器数据库实例和其他只读副本的所有已提交的更改。每个查询可能会等待一段时间，该时间取决于会话滞后量。从查询开始时，如果只读副本处于最新状态（具有来自写入器数据库实例的所有已提交数据），查询将继续进行。
**注意**  
全局一致性模式会影响会话中执行的查询的延迟。即使会话未发送任何写入查询，它也会执行等待。
+ `OFF` – 本地写入转发已禁用。

在使用写入转发的会话中，您可以使用 `REPEATABLE READ` 和 `READ COMMITTED` 隔离级别。但是，不支持 `SERIALIZABLE` 隔离级别。

 有关写入转发涉及的所有参数的更多信息，请参阅 [写入转发的默认参数设置](aurora-postgresql-write-forwarding-understanding.md#aurora-postgresql-write-forwarding-params)。

## 具有写入转发的事务访问模式
<a name="aurora-postgresql-write-forwarding-txns"></a>

如果事务访问模式设置为只读，则不使用本地写入转发。在连接到启用了本地写入转发的数据库集群和会话时，可以将访问模式设置为只读写。

有关事务访问模式的更多信息，请参阅 [SET TRANSACTION](https://www.postgresql.org/docs/current/sql-set-transaction.html)。