

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

# 將資料匯入 Amazon RDS 上的 PostgreSQL
<a name="PostgreSQL.Procedural.Importing"></a>

假設有要移動到 Amazon RDS 的現有 PostgreSQL 部署。任務的複雜性取決於資料庫大小以及要傳輸的資料庫物件類型。例如，假設一個資料庫包含大約數 GB 的資料集，以及預存程序和觸發條件。此類資料庫會比僅含少量 GB 測試資料且沒有觸發條件或預存程序的簡單資料庫更複雜。

在下列情況中，建議您使用原生 PostgreSQL 資料庫遷移工具：
+ 您準備進行同質遷移，亦即遷移的來源資料庫使用與目標資料庫相同的資料庫引擎。
+ 您想要遷移整個資料庫。
+ 原生工具可讓您以最短的停機時間來遷移系統。

在大多數其他情況下，使用 AWS Database Migration Service (AWS DMS) 執行資料庫遷移是最佳方法。 AWS DMS 可以在不停機的情況下遷移資料庫，而且對於許多資料庫引擎而言，會持續複寫，直到您準備好切換到目標資料庫為止。您可以使用 DMS AWS 遷移至相同的資料庫引擎或不同的資料庫引擎。如果您要遷移至與來源資料庫不同的資料庫引擎，您可以使用 AWS Schema Conversion Tool (AWS SCT)。您可以使用 AWS SCT 來遷移未由 遷移的結構描述物件 AWS DMS。如需 AWS DMS 的詳細資訊，請參閱[什麼是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)

*僅針對您的匯入*，修改資料庫參數群組來包含下列設定。您應該測試參數設定，以根據資料庫執行個體大小找出最有效率的設定。匯入完成之後，您也需要將這些參數回復為生產值。

將資料庫執行個體設定修改為下列：
+ 停用資料庫執行個體備份 (將 backup\_retention 設為 0)。
+ 停用多個可用區。

修改資料庫參數群組來包含下列設定。您應該僅在匯入資料時才使用這些設定。您應該測試參數設定，以根據資料庫執行個體大小找出最有效率的設定。匯入完成之後，您也需要將這些參數回復為生產值。


| 參數 | 匯入時的建議值 | 描述 | 
| --- | --- | --- | 
| `maintenance_work_mem` | 524288、1048576、2097152 或 4194304 (KB)。這些設定相當於 512 MB、1 GB、2 GB 和 4 GB。 | 此設定的值取決於主機大小。CREATE INDEX 陳述式期間會使用此參數，每個平行命令皆可使用這麼多的記憶體。計算最佳值，以免將此值設得太高而耗盡記憶體。 | 
| `max_wal_size` | 256 (適用於 9.6 版)、4096 (適用於 10 版及更新版本) | 將尺寸提高至最大，讓 WAL 能在自動檢查點期間成長。增加此參數可增加損毀復原所需的時間。此參數會將 `checkpoint_segments` 取代為 PostgreSQL 9.6 及更新版本。<br />若為 PostgreSQL 9.6 版，此數值是以 16 MB 為單位。若為更新的版本，該數值是以 1 MB 為單位。例如，在 9.6 版中，128 表示 128 個達到 16 MB 的區塊。在 12.4 版中，2048 表示 2048 個尺寸各為 1 MB 的區塊。 | 
| `checkpoint_timeout` | 1800 | 此設定的值可減少 WAL 輪換次數。 | 
| `synchronous_commit` | 關閉 | 停用此設定可加速寫入。關閉此參數會在伺服器當機時增加資料遺失的風險 (請勿關閉 FSYNC)。 | 
| `wal_buffers` |  8192 | 此值以 8 KB 為單位。這同樣可加速產生 WAL | 
| `autovacuum` | 0 | 載入資料時停用 PostgreSQL 自動清理參數，以免浪費資源 | 

使用 `pg_dump -Fc` (壓縮) 或 `pg_restore -j` (平行) 命令搭配這些設定。

**注意**  
PostgreSQL 命令 `pg_dumpall` 需要 super\_user 許可，但建立資料庫執行個體時並未授予此許可，因此無法用來匯入資料。

**Topics**
+ [從 Amazon EC2 執行個體匯入 PostgreSQL 資料庫](PostgreSQL.Procedural.Importing.EC2.md)
+ [使用 \\copy 命令將資料匯入 PostgreSQL 資料庫執行個體上的資料表](PostgreSQL.Procedural.Importing.Copy.md)
+ [將資料從 Amazon S3 匯入 RDS for PostgreSQL 資料庫執行個體](USER_PostgreSQL.S3Import.md)
+ [在 與資料庫執行個體之間傳輸 PostgreSQL 資料庫](PostgreSQL.TransportableDB.md)