すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:oracle_fdw を使用した Oracle データベースの同期

最終更新日:Jun 21, 2026

ApsaraDB RDS for PostgreSQL は oracle_fdw 拡張を提供します。この拡張を使用すると、Oracle データベースに接続し、PostgreSQL の外部テーブルを使用してそのデータを同期できます。

前提条件

  • ApsaraDB RDS for PostgreSQL インスタンスは、以下の要件を満たす必要があります。

    • メジャーバージョンは PostgreSQL 12 である必要があります。

    • マイナーエンジンバージョンは 20200421 以降である必要があります。

    説明

    SHOW rds_supported_extensions; を実行して、 oracle_fdw がサポートされているかどうかを確認できます。サポートされていない場合は、マイナーエンジンバージョンをアップグレードしてください。

  • Oracle Client のバージョンは 11.2 以降である必要があります。

  • 必要な Oracle Server のバージョンは、Oracle Client のバージョンによって異なります。詳細については、「Oracle 公式ドキュメント」をご参照ください。

  • Oracle データベースインスタンスの IP アドレスホワイトリストに、ApsaraDB RDS for PostgreSQL インスタンスの VPC CIDR ブロック (たとえば、172.xx.xx.xx/16 など) を追加します。

    説明

    インスタンスの [データベース接続] ページで VPC CIDR ブロックを確認できます。[データベース接続] ページで、[ネットワークタイプ] 行の CIDR ブロック (例: 172.x.x.x/16) を探します。詳細については、CIDR ブロックの横にある疑問符アイコンをクリックしてください。

背景

oracle_fdw は PostgreSQL の外部データラッパー拡張です。Oracle データベースからデータを読み取ることができ、PostgreSQL と Oracle 間のデータ同期を簡素化します。

詳細については、「oracle_fdw のドキュメント」をご参照ください。

注意事項

  • UPDATE および DELETE 操作を実行するには、外部テーブルの作成時にプライマリキー列に対して key パラメータを設定する必要があります。詳細については、「外部テーブルの作成」をご参照ください。

  • oracle_fdw は、外部テーブルの列のデータ型を認識して変換できる必要があります。oracle_fdw 拡張のデータ型変換ルールについては、「データ型」をご参照ください。

  • WHERE 句および ORDER BY 句はプッシュダウンをサポートしており、oracle_fdw がこれらの句を Oracle データベースに送信して処理させます。

  • JOIN 操作はプッシュダウンをサポートしていますが、以下の制限があります。

    • テーブルは同じ外部サーバーで定義されている必要があります。

    • 3 つ以上のテーブルを含む JOIN 操作では、プッシュダウンはサポートされていません。

    • JOIN 操作は SELECT ステートメントの一部である必要があります。

    • CROSS JOIN 操作で JOIN 条件がない場合、プッシュダウンはサポートされていません。

    • JOIN 句がプッシュダウンされる場合、ORDER BY 句はプッシュダウンされません。

  • PostGIS 拡張をインストールした後、oracle_fdw 拡張は以下の空間データ型をサポートします:

    • POINT

    • LINE

    • POLYGON

    • MULTIPOINT

    • MULTILINE

    • MULTIPOLYGON

拡張のインストールとアンインストール

重要

拡張をインストールする前に、ApsaraDB RDS for PostgreSQL インスタンスがサポートされているメジャーバージョンおよびマイナーエンジンバージョンであることを確認してください。詳細については、「前提条件」をご参照ください。

拡張のインストール

CREATE EXTENSION oracle_fdw;

拡張のアンインストール

DROP EXTENSION oracle_fdw;

手順

  1. Oracle データベースにマッピングするサーバーを作成します。以下のいずれかのコマンドを使用できます:

    • CREATE SERVER <server_name>
      FOREIGN DATA WRAPPER oracle_fdw
      OPTIONS (dbserver '//<oracle_internal_endpoint>:<oracle_internal_port>/<database_name>');
    • CREATE SERVER oradb
      FOREIGN DATA WRAPPER oracle_fdw
      OPTIONS (host '<oracle_internal_endpoint>', port '<oracle_internal_port>', dbname '<database_name>');
  2. CREATE USER MAPPING
    FOR <postgresql_username> SERVER <server_name>
    OPTIONS (user '<oracle_username>', password '<oracle_password>');
    説明

    Oracle ユーザーの認証情報を PostgreSQL データベースに保存したくない場合は、user オプションを空の文字列に設定し、必要な外部認証を提供できます。

    例:

    CREATE USER MAPPING
    FOR pguser SERVER oradb
    OPTIONS (user 'orauser', password 'orapwd');
  3. CREATE FOREIGN TABLE oratab (
              id        integer OPTIONS (key 'true')  NOT NULL,
              text      character varying(30),
              floating  double precision  NOT NULL
           ) SERVER oradb OPTIONS (table 'ORATAB',
                                   schema 'ORAUSER',
                                   max_long '32767',
                                   readonly 'false',
                                   sample_percent '100',
                                   prefetch '200');
    説明

    外部テーブルの構造は、対応する Oracle テーブルの構造と一致する必要があります。

    以下の表は、OPTIONS 句のパラメータについて説明しています:

    パラメータ

    説明

    key

    対応する列がプライマリキーであるかどうかを指定します。有効な値は true および false です。デフォルト値は false です。UPDATE および DELETE 操作を実行するには、すべてのプライマリキー列に対してこのパラメータを true に設定する必要があります。

    table

    テーブルの名前。このパラメーターは必須であり、通常は 大文字で指定します。このパラメーターの値として Oracle SQL 式を設定することもできます。例:OPTIONS (table '(SELECT col FROM tab WHERE val = ''string'')')。SQL 式を使用する場合、schema パラメーターは使用しないでください。

    schema

    テーブルの所有者です。通常は Oracle ユーザー名を大文字で指定します。このパラメータは、現在の接続ユーザーに属していないテーブルにアクセスする場合に使用します。

    max_long

    Oracle テーブル内の LONGLONG RAW、および XMLTYPE データ型の列の最大長です。値の範囲は 1 ~ 1073741823 です。デフォルト値は 32767 です。

    readonly

    Oracle テーブルを読み取り専用に設定します。これにより、INSERTUPDATE、および DELETE 操作が防止されます。

    sample_percent

    PostgreSQL のテーブル統計に使用される Oracle テーブルデータのサンプリング率です。値の範囲は 0.000001 ~ 100 です。デフォルト値は 100 です。

    prefetch

    外部テーブルスキャン中に PostgreSQL と Oracle 間で一度に転送される行数です。値の範囲は 0 ~ 1024 です。デフォルト値は 200 です。値 0 を指定すると、プリフェッチ機能が無効になります。

これらの手順を完了すると、外部テーブルを介して Oracle テーブルを操作できます。DELETEINSERTUPDATE、および SELECT などの基本的な操作がサポートされています。また、以下のコマンドを実行して外部スキーマをインポートすることもできます:

IMPORT FOREIGN SCHEMA <ora_schema_name>
FROM SERVER <server_name>
INTO <schema_name>
OPTIONS (case 'lower');
説明

case パラメータには以下の値を指定できます:

  • keep: Oracle のオブジェクト名を保持します。通常は大文字です。

  • lower: すべてのオブジェクト名を小文字に変換します。

  • smart:オブジェクト名に小文字が含まれていない場合、その名前を小文字に変換します。それ以外の場合は、元の名前を保持します。