

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

# 在 Aurora PostgreSQL 中使用未記錄的資料表
在 Aurora PostgreSQL 中使用未記錄的資料表

Amazon Aurora PostgreSQL 支援當機保護的未記錄資料表，即使在寫入器執行個體故障或容錯移轉之後也能維持資料完整性。在標準 PostgreSQL 中，未記錄的資料表會在寫入操作期間略過預寫日誌 (WAL)，進而加快寫入速度。不過，這會導致耐久性降低，因為未記錄的資料表不防當機，而且可能會在系統故障或不正常的關機後遺失資料。這些未記錄的資料表會在當機或不正常的關機後自動截斷。它們的內容和索引也不會複寫到待命伺服器。

相反地，由於 Aurora PostgreSQL 的分散式儲存架構，因此會以不同的方式處理未記錄的資料表。這是因為 Aurora 的儲存系統不依賴傳統的 PostgreSQL WAL 來提供耐久性。不過，在標準 PostgreSQL 中，通常與未記錄資料表相關的效能優勢在 Aurora 中可能不那麼重要。這是因為 Aurora 的分散式儲存架構，相較於標準 PostgreSQL 中使用的本機儲存，可能會帶來額外的額外負荷。

在 Aurora PostgreSQL 中使用未記錄的資料表時，請考慮下列事項：
+ 您只能從 Aurora 資料庫叢集中的寫入器節點存取未記錄的資料表。
+ 只有在提升為寫入器狀態時，讀取器節點才能存取未記錄的資料表。
+ 當您嘗試從讀取器節點存取未記錄的資料表時，將導致下列錯誤：

  `cannot access temporary or unlogged relations during recovery.`

## 建立未記錄的資料表


若要在 Aurora PostgreSQL 中建立未記錄的資料表，請在 CREATE TABLE 陳述式中新增 UNLOGGED 關鍵字：

```
CREATE UNLOGGED TABLE staging_sales_data (
    transaction_id bigint,
    customer_id bigint,
    product_id bigint,
    transaction_date date,
    amount NUMERIC
);
```

## 在遷移期間處理未記錄的資料表


準備將資料遷移至 Aurora PostgreSQL 時，請務必適當地識別和處理未記錄的資料表。未記錄的資料表不會進行 WAL 記錄，而且會從複寫串流中排除，這表示它們不會複寫至 Aurora 僅供讀取複本。

在建立 Aurora 僅供讀取複本之前，如果尚未使用，請將未記錄的資料表轉換為已記錄的資料表或捨棄它們。

若要確認執行個體內每個資料庫中是否存在未記錄的資料表，請使用下列命令：

```
SELECT oid, relfilenode, relname, relpersistence, relkind 
FROM pg_class 
WHERE relpersistence ='u';
```

若要將未記錄的資料表轉換回記錄的資料表，請使用下列命令：

```
ALTER TABLE table_name SET LOGGED;
```

此操作會重寫整個資料表，並在其上放置獨佔鎖定，直到完成為止。對於大型資料表，這可能會導致大量停機時間。

## 將未記錄的資料表轉換為已記錄的資料表


當您需要將未記錄的資料表轉換回記錄的資料表時，您可以使用下列命令：

```
ALTER TABLE table_name SET LOGGED;
```

此操作會重寫整個資料表，並在其上放置獨佔鎖定，直到操作完成為止。對於大型資料表，這可能會導致大量的停機時間。

## 未記錄的資料表和邏輯複寫


邏輯複寫通常不包含未記錄的資料表，因為邏輯複寫依賴 WAL 來擷取和傳輸變更。根據預設，未記錄資料表的變更不會進行 WAL 記錄，且會從複寫串流中排除，因此不適合需要邏輯複寫的使用案例。不過，Aurora PostgreSQL 提供名為 `rds.logically_replicate_unlogged_tables` 的參數，可讓您控制此行為：
+ 當 `rds.logically_replicate_unlogged_tables` 設為 0 (關閉) 時，未記錄的資料表會從邏輯複寫中排除。
+  當 `rds.logically_replicate_unlogged_tables` 設為 1 (開啟) 時，未記錄的資料表會包含在邏輯複寫中。

**注意**  
在 Aurora PostgreSQL 中，`rds.logically_replicate_unlogged_tables` 參數預設為版本 14 和更早版本中的 1 (開啟)，以及版本 15 和更新版本中的 0 (關閉)。