PostgreSQL: サポートされているデータ型、オブジェクトおよび操作

Oracle GoldenGate for PostgreSQLでは、サポートされるPostgreSQLデータベース・バージョンの初期ロードおよびトランザクション・データの取得と配信がサポートされます。

Oracle GoldenGate for PostgreSQLでは、ソース・データのマッピング、フィルタリングおよび変換がサポートされており、このドキュメントで特に明記されている場合を除き、Oracle GoldenGateでサポートされている他のソース・データベースから導出されたデータのPostgreSQLデータベースへのレプリケーションもサポートされています。

サポートされているデータベース

Oracle GoldenGate for PostgreSQLでサポートされているデータベースおよび制限事項は、次のとおりです。
  • キャプチャおよび配信でサポートされているのはユーザー・データベースのみです。

  • Oracle GoldenGateでは、アーカイブされたログからの取得はサポートされません。

  • 配信は、レプリカ、スタンバイ・データベースに対してはサポートされていません。

  • キャプチャは、レプリカ、スタンバイ・データベースからもサポートされています。

  • 高可用性。詳細は、「高可用性に関する考慮事項」を参照してください。

高可用性に関する考慮事項

Oracle GoldenGateでは、PostgreSQL高可用性構成からの変更データの取得がサポートされています。この機能は、PostgreSQLデータベース・バージョン16以上でのみ使用できます。チェンジ・データ・キャプチャは、高可用性設定におけるプライマリ・サーバーまたは任意の読取り専用スタンバイ・サーバーで構成できます。フェイルオーバー時に発生する可能性があるデータ損失と手動操作を回避するために、Oracle GoldenGateでは、高可用性設定を、同期レプリケーションを使用して構成することをお薦めしています。

データ損失と手動操作の考えられるシナリオの詳細は、『Oracle GoldenGate procedures for PostgreSQL High Availability Failover』(ドキュメントID 2818379.1)を参照してください。

PostgreSQL高可用性設定からCDC Extractを構成するには、次のタスクを実行します:
  1. Extractを、高可用性設定におけるプライマリ・サーバーまたは読取り専用スタンバイ・サーバーからデータを取得するように構成できます。

  2. Extractが1つのノード上(プライマリまたはスタンバイ)で構成されている場合は、データ取得を開始する前に、高可用性設定における他のすべてのノード上で同時に、同じ名前が付いたレプリケーション・スロットを作成する必要があります。

    1. 次の例でに示すように、REGISTER EXTRACTコマンドを使用して、1つのサーバー上(ここでExtractが構成されている)にレプリケーション・スロットを作成します。
      REGISTER EXTRACT exte
    2. Extractを登録した直後に、同じ名前が付いたレプリケーション・スロットを作成します。高可用性設定における他のすべてのノードで、同じレプリケーション・スロット名を明示的に使用する必要があります。
      postgres=# select pg_create_logical_replication_slot('exte_ac6b520cab2871b7', 'test_decoding');
       pg_create_logical_replication_slot 
      ------------------------------------
       (exte_ac6b520cab2871b7,0/8169E00)
      (1	row)
      2025-01-20T06:58:22Z  INFO    OGG-25355  Successfully created replication slot 'exte_ac6b520cab2871b7' for Extract group 'EXTE' in database 'postgres'.
      
    3. 対応するデータベースに接続し、PSQLからpg_create_logical_replication_slot文を実行します。

      ノート:

      スタンバイでのレプリケーション・スロット作成に関する重要なノート: 読取り専用スタンバイ・サーバーでレプリケーション・スロットの作成が試みられた場合(REGISTER EXTRACTコマンドまたはpg_create_logical_replication_slot文を使用)、その操作は、高可用性設定におけるプライマリ・サーバー上の任意の表に対していくつかのDML (任意のランダムDMLでかまわない)が実行された後にのみ完了します。別の方法としては、ハートビート機能をプライマリ・サーバー上で有効にできます。それにより、必要なDMLアクティビティがプライマリ上で発生して、スタンバイ・サーバー上でのレプリケーション・スロット作成を完了させることができます。
  3. ADD TRANDATAまたはDELETE TRANDATAコマンドは、PostgreSQL高可用性設定における読取り専用スタンバイ・サーバーではサポートされていません。読取り専用スタンバイ・サーバーにある表のREPLICA IDENTITY設定は、プライマリ・サーバーにある対応する表のREPLICA IDENTITY設定と同じになります。

  4. データ取得が読取り専用スタンバイ・サーバー上で構成されているときにハートビート機能を使用するには、ハートビート機能をプライマリ・サーバー上で有効にする必要があります。

  5. フェイルオーバーについては、フェイルオーバー後に目的のノード(要件に基づいてプライマリ/スタンバイのどちらか)に接続してデータ取得を続行するように、Extractパラメータ・ファイルを変更する必要があります。

    PostgreSQL高可用性クラスタ内に3つのノードがあり、対応する接続別名がある状況について考えてみます:

    Node1 (現在のプライマリ)、対応する接続別名: node1

    Node2 (スタンバイ)、対応する接続別名: node2

    Node3 (スタンバイ)、対応する接続別名: node3

    フェイルオーバーの前に、これらのノードのどれか(node2など)からデータを取得するようにExtractが構成されている場合は、Extractパラメータ・ファイルに次のようなエントリが含まれます。
    USERIDALIAS node2
    フェイルオーバーの発生時に、プライマリ・ノード(node1)が停止し、セカンダリ・ノード(node2)が新しいプライマリになる場合は、次の2つの可能性があります:
    1. 同じnode2からのデータ取得を続行するには:
      • Extractパラメータ・ファイル内に変更は必要ありません。

      • Extractを再起動します。

    2. データを必ず別のノードから取得するには:

      • 目的のノード(Node3など)に接続するようにExtractパラメータ・ファイルを変更します。
        USERIDALIAS node3
      • Extractを再起動します。

サポートされているPostgreSQLデータ型

Oracle GoldenGateでサポートされているPostgreSQLデータ型とこのサポートの制限事項を示します。

  • array

  • bigint

  • bigserial

  • bit(n)

  • bit varying(n)

  • boolean

  • bytea

  • char (n)

  • cidr

  • citext

  • date

  • decimal

  • double precision

  • 列挙型

  • inet

  • integer

  • interval

  • json

  • jsonb

  • macaddr

  • macaddr8

  • money

  • numeric

  • pgvector extension

  • real

  • serial

  • smallint

  • smallserial

  • text

  • time (タイムゾーンあり/なし)

  • timestamp (タイムゾーンあり/なし)

  • tsquery

  • tsvector

  • uuid

  • varchar(n)

  • varbit

  • xml

配列データ型の処理

PostgreSQLは、様々な組込みおよびUDT型のarrayをサポートしています。Oracle GoldenGateリリース23ai以降、Oracle GoldenGateのExtractおよびReplicatは、次のタイプのPostgreSQL arrayデータ型をサポートしています。

  • boolean

  • bigint

  • bit

  • char

  • date

  • double precision

  • enum

  • int

  • interval

  • numeric

  • money

  • real

  • smallint

  • timestamptimestampztimetimetz

  • varbit

  • varchar

  • text

  • tsvector

  • tsquery

初期ロードとCDCの両方のExtractで、これらの配列型がサポートされます。

ノート:

初期ロードExtractでは、timeデータ型のPostgreSQL arrayはサポートされていません。

サポートの制限事項

  • charvarchartextまたはbyteaデータ型の列が主キーまたは一意キーの一部である場合、これらの列の個々の最大長が8191バイトを超えることはできません。

  • Extractでは、サイズが512 MBを超えるbytea列を持つレコードは処理できません。

  • 主キーの一部であるデータ型CITEXTの列は、最大8000バイトのサイズでサポートされます。8000バイトを超える主キーの一部であるCITEXT列はサポートされません。

  • Extractでは、サイズが512 MBを超えるbytea列を持つレコードは処理できません。

  • realdoublenumericdecimal: NaN入力値はサポートされていません。

  • bit/varbitデータ型には、次の制限事項が適用されます。

    • 最大4kの長さがサポートされます。4kより大きい長さの場合、データは切り捨てられ、下位の4kビットのみが取得されます。

    • ソースのbit(n)列は、PostgreSQL以外のターゲットの文字型の列にのみ適用でき、PostgreSQLターゲットのchar型またはbit/varbit列に適用できます。

  • 次の制限事項は、タイムゾーンを指定したtimestampとタイムゾーンを指定しないtimestampの両方に適用されます。
    • データ内にBCまたはADタグのあるtimestampデータはサポートされていません。

    • 1883-11-18 12:00:00より古いtimestampデータはサポートされていません。

    • YEARコンポーネントの数字が4桁を超えるtimestampデータはサポートされていません。

    • timestamp列のInfinity/-Infinity入力文字列はサポートされていません。

  • intervalを使用する場合の制限事項は、次のとおりです。

    • interval型の列からの混合記号intervalデータの取得はサポートされていません。Extractパラメータ・ファイルでDBOPTIONS ALLOWNONSTANDARDINTERVALDATAを使用すると、混合符号intervalデータ(またはOracle GoldenGateでサポートされない他の形式のintervalデータ)を文字列(標準のintervalデータではなく)として取得できます。

      次に、Extractパラメータ・ファイルでDBOPTIONS ALLOWNONSTANDARDINTERVALDATAを使用して証跡ファイルに書き込まれるデータの例を示します。

    • +1026-9 +0 +0:0:22.000000は、1026年、9か月、0日、0時間、0分、22秒と解釈されます。

    • -0-0 -0 -8は、0年、0か月、0日、8時間として解釈されます。

    • +1-3 +0 +3:20は、1年、3か月、0日、3時間、20分と解釈されます。

  • Replicat: ソースintervalデータがDBOPTIONS ALLOWNONSTANDARDINTERVALDATAを使用して取得され、証跡に文字列として書き込まれた場合、対応するソース列はターゲットのcharまたはbinary型の列にマップできます。

  • dateの制限事項は次のとおりです。

    • データ内にBCまたはADタグのあるdateデータはサポートされていません。

    • date列のInfinity/-Infinity入力文字列はサポートされていません。

  • textjsonxmlbyteachar (>8191)varchar (>8191)の列はLOB列として扱われ、次の制限事項があります。

    • GETUPDATEBEFORESを使用する場合、LOB列の変更前イメージは記録されません。

    • NOCOMPRESSUPDATESを使用する場合、LOB列は変更された場合のみ変更後イメージに記録されます。

  • 浮動小数点数の範囲および精度のサポートは、ホスト・マシンによって異なります。通常は有効桁数が16桁の精度ですが、データベースのドキュメントで想定されている近似について確認してください。Oracle GoldenGateでは、サポートされる精度を超える値は丸められるか切り捨てられます。

サポートされていないPostgreSQLデータ型

Oracle GoldenGate for PostgreSQLでは、次のデータ型はサポートされていません。

ノート:

Extractパラメータ・ファイルにサポートされていないデータ型の表が含まれている場合、Extractはエラー・メッセージとともに停止します。レプリケーションを再開するには、Extractファイルから表を削除するか、サポートされていないデータ型を含む列を表から削除します。

PostgreSQLについてサポートされているオブジェクトおよび操作

  • Oracle GoldenGate for PostgreSQLでは、DML操作(挿入/更新/削除)のみサポートされます。DDLレプリケーションはサポートされていません。

  • Oracle GoldenGate for PostgreSQLでは、PostgreSQL 11以降から開始した切捨て操作のレプリケーションがサポートされており、ExtractおよびReplicatでGETTRUNCATESパラメータが必要です。

  • 大/小文字を区別する名前と区別しない名前の使用:
    • 引用符で囲まれていない名前は、大/小文字の区別がなく、暗黙的に小文字です。たとえば、CREATE TABLE MixedCaseTableSELECT * FROM mixedcasetableは同等です。

    • 引用符で囲まれた表および列の名前は大/小文字が区別され、Extract、ReplicatおよびOracle GoldenGateコマンドで正しくリストされている必要があります。

      たとえば、大/小文字が区別される表名をサポートするには、TABLE appschema.”MixedCaseTable”およびADD TRANDATA appschema.”MixedCaseTable”が必要です。

表、ビューおよびマテリアライズド・ビュー

取得と配信の対象に含める表は次の要件を満たし、サポートされているPostgreSQLデータ型にリストされたデータ型のみを含む必要があります。

  • Oracle GoldenGate for PostgreSQLでは、ユーザー表からのトランザクションDMLの取得およびユーザー表への配信がサポートされます。

  • Oracle GoldenGate for PostgreSQL (バージョン21.14.0.0.0以降)では、ベース・パーティション表への取得および配信がサポートされています。

  • グローバリゼーションは、オブジェクト名(表名/スキーマ名/データベース名/列名)および列データでサポートされています。

  • マテリアライズド・ビューの取得と配信がサポートされています。

  • Extractプロセスでは複数のマテリアライズド・ビューがサポートされています。これらは、一意索引がある必要があり、同時にリフレッシュされる必要があります。

  • CDR, UNIFIED FORMAT RECORDおよびNOCOMPRESSDELETES, GETUPDATEBEFORESをサポートできるように、マテリアライズド・ビューのレプリカ・アイデンティティをFULLに設定する必要があります。また、マテリアライズド・ビューでWAL DELETEレコードを処理するには、レプリカ・アイデンティティをFULL設定にする必要があります。マテリアライズド・ビューのレプリカ・アイデンティティがFULLに設定されていない場合、DELETEレコードはExtractによって処理されません。

    レプリカ・アイデンティティをFULLに設定するには、次のコマンドを使用します:

    add trandata schema.materialized_view, ALLCOLS
  • UPDATEまたはPK UPDATEの統計は、DELETEの後にINSERTが続くものとして記録されます。これにより、Extract統計で例外的な内容が表示されますが、ソース・マテリアライズド・ビューとターゲット・マテリアライズド・ビューのデータを比較すると、データ同期は適切です。

  • PK UPDATEの結果はDELETEの後にINSERTが続くものであるため、Extract統計では、データベースの行数とは異なる内容が示されます。データ比較ツールを使用して、ソース・データとターゲット・データ(マテリアライズド・ビュー・レコードを含む)の間のデータ整合性をチェックする必要があります。

  • 証跡からのデータをReplicatプロセスによってマテリアライズド・ビューに適用することはできません。かわりに、証跡から他の表にマテリアライズド・ビュー・データをマップできます。

制限事項

  • Oracle GoldenGate for PostgreSQLでは、ビューに対する取得および配信はサポートされていません。

  • Oracle GoldenGate for PostgreSQLでは、パーティション表の個々のパーティションからの取得はサポートされていません。

順序およびIDENTITY列

  • 順序は、一方向、双方向および複数方向の実装について、ソース表とターゲット表でサポートされています。

  • GENERATED BY DEFAULT AS IDENTITY句を使用して作成されたIDENTITY列は、一方向、双方向および複数方向の実装について、ソース表とターゲット表でサポートされています。

  • GENERATED ALWAYS AS IDENTITY句を使用して作成されたIDENTITY列はターゲット・データベース表ではサポートされていないため、IDENTITYプロパティをターゲット表から削除するか、GENERATED BY DEFAULT AS IDENTITYに変更する必要があります。

  • 双方向および複数方向の実装の場合は、構成内のサーバー数に等しいINCREMENT BY値およびそれぞれに異なるMINVALUEを使用して、IDENTITY列および順序を定義します。

    たとえば、2つのデータベースのある双方向構成のMINVALUE /INCREMENT BY値は、次のようになります。

    Database1。INCREMENT BYを2にして、MINVALUEを1に設定します。

    Database2。INCREMENT BYを2にして、MINVALUEを2に設定します。

    たとえば、3つのデータベースのある複数方向構成のMINVALUE /INCREMENT BY値は、次のようになります。

    Database1。INCREMENT BYを3にして、MINVALUEを1に設定します。

    Database2。INCREMENT BYを3にして、MINVALUEを2に設定します。

    Database3。INCREMENT BYを3にして、MINVALUEを3に設定します。