

# DB インスタンス 間での PostgreSQL データベースの移行
<a name="PostgreSQL.TransportableDB"></a>

Amazon RDS の PostgreSQL トランスポータブルデータベースを使用することで、2 つの DB インスタンス間で PostgreSQL データベースを移行できます。この手法により、異なる DB インスタンス間での大規模なデータベースの移行が大幅に高速化されます。このアプローチを使用するには、対象の DB インスタンスの両方で、PostgreSQL の同じ主要バージョンを実行している必要があります。

この機能を使用するには、移行元の DB インスタンスと移行先の DB インスタンスで、ともに `pg_transport` 拡張機能をインストールします。`pg_transport` 拡張は、最小限のプロセスでデータベースファイルを移動するための、物理的な移行メカニズムを提供します。このメカニズムにより、ダンプとロードによる従来のプロセスと比較してデータの移行が大幅に高速化され、ダウンタイムが最小限に抑えられます。

**注記**  
PostgreSQL トランスポータブルデータベースは、RDS for PostgreSQL 11.5 以降、および RDS for PostgreSQL のバージョン 10.10 以降で利用可能です。

ある RDS for PostgreSQL DB インスタンスから別のインスタンスへの、PostgreSQL DB インスタンスの移行を行うには、最初に、「[ 移行に向けた DB インスタンスの設定](PostgreSQL.TransportableDB.Setup.md)」での説明に従いながら、ソースインスタンスとデスティネーションインスタンスの設定を行います。その後、「[ PostgreSQL データベースの移行](PostgreSQL.TransportableDB.Transporting.md)」で説明されている関数を使用してデータベースを移行します。

**Topics**
+ [データベースの移行中に何が起こるか](#PostgreSQL.TransportableDB.DuringTransport)
+ [PostgreSQL トランスポータブルデータベースの使用に関する制約事項](#PostgreSQL.TransportableDB.Limits)
+ [PostgreSQL データベース移行の設定](PostgreSQL.TransportableDB.Setup.md)
+ [移行元から移行先への PostgreSQL データベースの転送](PostgreSQL.TransportableDB.Transporting.md)
+ [トランスポータブルデータベースの関数リファレンス](PostgreSQL.TransportableDB.transport.import_from_server.md)
+ [トランスポータブルデータベースのパラメータリファレンス](PostgreSQL.TransportableDB.Parameters.md)

## データベースの移行中に何が起こるか
<a name="PostgreSQL.TransportableDB.DuringTransport"></a>

PostgreSQL のトランスポータブルデータベース機能は、移行先 DB インスタンスが移行元 DB インスタンスからデータベースをインポートするプルモデルを使用します。`transport.import_from_server` 関数を使うと、移行先 DB インスタンスで移行中のデータベースが作成されます。移行中、移行中のデータベースは、移行先 DB インスタンスではアクセスすることはできません。

移行スタートの際は、移行元データベースのすべての現在のセッションが終了します。移行元 DB インスタンスの移行元データベース以外のすべてのデータベースには移行による影響はありません。

移行元データベースは、特別な読み取り専用モードとなります。このモードの最中は、移行元データベースにアクセス可能で、読み取り専用のクエリを実行できます。ですが、書き込み可能なクエリやその他の種類のコマンドはブロックされます。移行された特定の移行元データベースのみがこれら制限による影響を受けます。

移行中、移行元 DB インスタンスは、ポイントインタイムの復元はできません。これは、移行がトランザクションではなく、変更を記録するための PostgreSQL ログ先行書き込みを使用しないからです。移行先 DB インスタンスの自動バックアップが有効になっていれば、移行後に、バックアップが自動で実行されます。ポイントインタイムの復元は、バックアップが終了した*後*に実行が可能になります。

移行に失敗した場合、`pg_transport` のエクステンションが、移行先/元 DB インスタンスで行ったすべての変更をやり直します。これには、移行先で一部のみ移行されたデータベースの削除も含まれます。失敗の内容によっては、移行元データベースで引き続き、書き込み可能クエリが拒否されます。これが発生した場合、以下のコマンドを使い、書き込み可能クエリを許可します。

```
ALTER DATABASE {{db-name}} SET default_transaction_read_only = false;
```

## PostgreSQL トランスポータブルデータベースの使用に関する制約事項
<a name="PostgreSQL.TransportableDB.Limits"></a>

トランスポータブルデータベースには以下の制限があります。
+ **リードレプリカ** - リードレプリカまたはリードレプリカの親インスタンスでは、トランスポータブルデータベースを使用できません。
+ **サポートされていない列タイプ** - このメソッドを使用して移行するすべてのデータベーステーブル内の `reg` データ型を使用することはできません。これらタイプは、システムカタログオブジェクト ID (OID) に依存し、移行中に変わることがあります。
+ **テーブルスペース**　-すべてのソースデータベースオブジェクトは既定の `pg_default` テーブルスペースに既存しなければいけません。
+ **互換性** - 移行先および移行元両方の DB インスタンスは、PostgreSQL の同じ主要バージョンを実行しなければなりません。
+ **拡張機能** – 移行元 DB インスタンスには、`pg_transport` のみがインストールされています。
+ **ロールおよび ACL** - 移行元データベースのアクセス権限および所有権情報は、移行先データベースには移行されません。すべてのデータベースオブジェクトは、移行するローカルの移行先ユーザーが作成および所有します。
+ **同時移行数** – ワーカープロセスが適切に設定されていれば、単一の DB インスタンスで同時に最大 32 個の (インポートとエクスポートの両方を含む) 移行をサポートできます。
+ **RDS for PostgreSQL DB インスタンスのみ** – PostgreSQL のトランスポータブルデータベースは、RDS for PostgreSQL DB インスタンスでのみサポートされます。オンプレミスのデータベースや Amazon EC2 で実行されているデータベースでは使用できません。