このページでは、主キーのない Oracle テーブルを移行する方法について説明します。
主キーの自動生成では、Database Migration Service が主キーのないソーステーブルを処理する方法について説明します。
欠落している主キーを手動で追加するでは、変換されたスキーマに欠落している主キーを追加するために使用できるクエリの例を示します。
主キーの自動生成の概要
主キーのないテーブルでは、一貫したレプリケーションが保証されません。Database Migration Service は、主キーを持つテーブルのみを移行します。移行元データベースに主キーのないテーブルが含まれている場合、Database Migration Service は次の方法で処理できます。
-
ソースコードとスキーマを変換すると、Database Migration Service は、宛先テーブルに
ROWID列を追加することで、欠落している主キーを自動的に作成できます。この自動プロセスでは、ソーステーブルが次の条件を満たしている必要があります。- 主キーがまだない。
- null 値を許容しない列がない
UNIQUE制約を設定しないでください。 - null 値を許容しない列を含む
UNIQUEインデックスを作成しないでください。
- 以前のコンバージョン ワークスペースでは、Database Migration Service は主キーを自動的に作成しません。以前のコンバージョン ワークスペースを使用している場合は、変換された PostgreSQL スキーマのテーブルに、欠落している主キーを手動で追加する必要があります。
欠落している主キーを手動で追加する
主キーのない Oracle テーブルを移行するには、次の操作を行います。
- コンバージョン ワークスペースを使用して、ソースコードとスキーマを変換します。
- 標準のコンバージョン ワークスペースについては、 ソースコードとスキーマを変換するをご覧ください。
- 以前のコンバージョン ワークスペースについては、 以前のコンバージョン ワークスペースを操作するをご覧ください。
- SQL クライアントを使用して、移行先の Cloud SQL インスタンスに接続します。次のメソッドを使用できます。
-
psqlクライアント。この方法を使用してインスタンスのプライベート IP に接続できますが、Compute Engine 仮想マシンの作成が必要になる場合があります。 -
gcloud sql connectコマンド。このコマンドは、パブリック IP アドレスが有効になっている Cloud SQL インスタンスでのみ機能します。
-
- テーブルに欠落している主キー制約を作成します。主キーの詳細については、PostgreSQL ドキュメントの
主キーをご覧ください。
次のセクションを開いて、SQL コマンドのサンプルを確認することもできます。
既存の列を使用して主キーを作成する
テーブルには、列または列の組み合わせに基づく論理主キーがすでに存在する場合があります。たとえば、一意の制約またはインデックスが構成された列が存在する場合があります。これらの列を使用して、ソース データベースのテーブルに新しい主キーを生成します。次に例を示します。
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
次のように置き換えます。
- TABLE_NAME は、主キーのないテーブルの名前に置き換えます。
- COLUMN_NAME は、主キーとして使用できる一意の制約またはインデックスを持つ列の名前に置き換えます。
すべての列を使用して主キーを作成する
主キーとして機能する既存の制約がない場合は、テーブルのすべての列を使用して主キーを作成します。PostgreSQL インスタンスで許可されている主キーの最大長を超えないようにしてください。
この方法で複合主キーを作成する場合は、使用するすべての列名を明示的にリストする必要があります。この目的のために、ステートメントを使用してすべての列名を取得することはできません。次に例を示します。
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
次のように置き換えます。
- TABLE_NAME は、主キーのないテーブルの名前に置き換えます。
- COLUMN_NAME_1、COLUMN_NAME_2 などは、主キーの作成に使用する列の名前に置き換えます。
ROWID疑似列を使用して一意の制約を作成するOracle データベースでは、
ROWID疑似列を使用して、テーブル内の各行の場所を保存します。主キーのない Oracle テーブルを移行するには、移行先の PostgreSQL データベースにROWID列を追加します。Database Migration Service は、ソース OracleROWID疑似列の対応する数値で列に値を入力します。列を追加して主キーとして設定するには、次のコマンドを実行します。
ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL; CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid; ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq'); ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);
次のように置き換えます。
- TABLE_NAME は、列を追加するテーブルの名前に置き換えます。
- CONSTRAINT_DISPLAY_NAME は、
PRIMARY KEY制約の ID に置き換えます。