

# Amazon RDS の PostgreSQL にデータをインポートする
<a name="PostgreSQL.Procedural.Importing"></a>

Amazon RDS に移動させる既存の PostgreSQL デプロイがあるとします。タスクの複雑さは、データベースのサイズと転送するデータベースオブジェクトの種類に依存しています。例えば、データベースにギガバイトのオーダーのデータセット、さらにストアドプロシージャとトリガーが含まれているとします。このようなデータベースは、単純なデータベース (数メガバイトのテストデータを含むだけで、トリガーやストアドプロシージャを含まないもの) よりも複雑になります。

次の条件で、ネイティブ PostgreSQL データベース移行ツールを使用することをお勧めします。
+ ターゲットデータベースエンジンと同じデータベースエンジンを持つデータベースから移行する、同機種移行である。
+ データベース全体を移行する。
+ ネイティブツールでは、最小のダウンタイムでシステムを移行することができます。

他の多くの場合、データベースの移行には、AWS Database Migration Service (AWS DMS) を使用することが最良のアプローチとなります。AWSDMS により、ダウンタイムなしでデータベースを移行できます。また、多くのデータベースエンジンでは、ターゲットデータベースへの切り替え準備ができるまで、進行中のレプリケーションを続行することができます。AWS DMS を使用することで、同じデータベースエンジン、または異なるデータベースエンジンへの移行が可能です。ソースデータベースとは別のデータベースエンジンへ移行する場合は、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)」を参照してください。

DB パラメータグループを変更し、次の*インポート専用*の設定を含めます。DB インスタンスサイズの最も効率的な設定を見つけるために、パラメータ設定をテストする必要があります。さらに、インポートが完了したら、これらのパラメータを本番稼働用の値に戻す必要があります。

DB インスタンスの設定を次のように変更します。
+ DB インスタンスのバックアップを無効にします (backup\_retention を 0 に設定します)。
+ マルチ AZ を無効にする。

次の設定を含むように DB パラメータグループを変更します。これらの設定は、データのインポート時にのみ使用してください。DB インスタンスサイズの最も効率的な設定を見つけるために、パラメータ設定をテストする必要があります。さらに、インポートが完了したら、これらのパラメータを本番稼働用の値に戻す必要があります。


| Parameter | インポート時の推奨値 | 説明 | 
| --- | --- | --- | 
| `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 を拡張するための最大サイズ。このパラメータを増やすと、クラッシュ回復に必要な時間が長く可能性があります。PostgreSQL 9.6 以降では、このパラメータは `checkpoint_segments` を置き換えられます。<br />PostgreSQL バージョン 9.6 の場合、この値は 16 MB 単位です。それ以降のバージョンでは、値は 1 MB 単位です。例えば、バージョン 9.6 では、128 は、それぞれ 16 MB のサイズである 128 個のチャンクを意味します。バージョン 12.4 では、2048 は、それぞれ 1 MB のサイズである 2048 個のチャンクを意味します。 | 
| `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 権限が必要ですが、この権限は DB インスタンスの作成時に付与されません。そのため、このコマンドをデータのインポートに使用することはできません。

**Topics**
+ [Amazon EC2 インスタンスから PostgreSQL データベースをインポートする](PostgreSQL.Procedural.Importing.EC2.md)
+ [\\copy コマンドを使用して PostgreSQL DB インスタンスのテーブルにデータをインポートする](PostgreSQL.Procedural.Importing.Copy.md)
+ [Amazon S3 から RDS for PostgreSQL DB インスタンスにデータをインポートする](USER_PostgreSQL.S3Import.md)
+ [DB インスタンス 間での PostgreSQL データベースの移行](PostgreSQL.TransportableDB.md)