

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 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` 命令修改現有的資料庫叢集時，此選項也會起作用。您可以使用 `--no-enable-local-write-forwarding` 選項搭配這些相同的 CLI 命令來停用本機寫入轉送。

 下列範例會建立啟用本機寫入轉送的 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>

如果交易存取模式設定為唯讀，則不會使用本機寫入轉送。您可以在連線至已啟用本機寫入轉送的資料庫叢集和工作階段時，將存取模式設定為僅讀取寫入。

如需交易存取模式的詳細資訊，請參閱[設定交易](https://www.postgresql.org/docs/current/sql-set-transaction.html)。