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のPostgreSQL高可用性フェイルオーバーの手順(ドキュメントID 2818379.1)を参照してください。
PostgreSQL高可用性設定からCDC Extractを構成するには、次のタスクを実行します: 1。Extractは、高可用性設定でプライマリ・サーバーまたは読取り専用スタンバイ・サーバーからデータを取得するように構成できます。
-
Extractが1つのノード(プライマリまたはスタンバイ)で構成されている場合、データ取得を開始する前に、高可用性設定の他のすべてのノードに同じ名前のレプリケーション・スロットを同時に作成する必要があります。
-
次の例に示すように、
REGISTER EXTRACTコマンドを使用して、1つのサーバー(Extractが構成されているサーバー)にレプリケーション・スロットを作成します。REGISTER EXTRACT exte -
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'. -
対応するデータベースに接続し、PSQLから
pg_create_logical_replication_slot文を実行します。注意: STANDBYでのREPLICATION SLOT CREATIONの重要なノート: (REGISTER EXTRACTコマンドまたはpg_create_logical_replication_slot文を使用して)読取り専用スタンバイ・サーバーでレプリケーション・スロットの作成が試行されると、高可用性設定でプライマリ・サーバーの任意の表でDML (任意のランダムDML)が実行された後にのみ、操作が完了します。または、プライマリ・サーバーでハートビート機能を有効にすると、プライマリ・サーバーで必要なDMLアクティビティが発生し、スタンバイ・サーバーでのレプリケーション・スロットの作成が完了する可能性があります。
-
-
ADD TRANDATAまたはDELETE TRANDATAコマンドは、PostgreSQL高可用性設定の読取り専用スタンバイ・サーバーではサポートされていません。読取り専用スタンバイ・サーバー上の表のREPLICA IDENTITY設定は、プライマリ・サーバー上の対応する表のREPLICA IDENTITY設定と同じです。 -
データ取得が読取り専用スタンバイ・サーバーで構成されている場合にハートビート機能を使用するには、プライマリ・サーバーでハートビート機能を有効にする必要があります。
-
フェイルオーバーの場合、Extractパラメータ・ファイルは、フェイルオーバー後にデータ取得を続行するために、目的のノード(要件に基づくプライマリ/スタンバイ)に接続するように変更する必要があります。
例
PostgreSQL高可用性クラスタに3つのノードがあり、対応する接続別名がある状況を考えてみます。
Node1 (現在のプライマリ)と対応する接続別名:
node1Node2 (スタンバイ)と対応する接続別名:
node2Node3 (スタンバイ)と対応する接続別名:
node3フェイルオーバーの前に、Extractがいずれかのノード(
node2など)からデータを取得するように構成されている場合、Extractパラメータ・ファイルには次のようなエントリが含まれます。USERIDALIAS node2フェイルオーバーの場合、プライマリ・ノード(
node1)が停止し、セカンダリ・ノード(node2)が新しいプライマリになるため、次の2つの可能性があります。-
同じ
node2からのデータ取得を続行するには:-
Extractパラメータ・ファイルでの変更は必要ありません。
-
Extractを再起動します。
-
-
常に別のノードからデータを取得するには:
-
Extractパラメータ・ファイルを変更して、目的のノード(Node3など)に接続します。
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 -
Enumerated Types -
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リリース26ai以降、Oracle GoldenGateのExtractおよびReplicatは、次のタイプのPostgreSQL arrayデータ型をサポートしています。
-
boolean -
bigint -
bit -
char -
date -
double precision -
enum -
int -
interval -
numeric -
money -
real -
smallint -
timestamp、timestampz、time、timetz -
varbit -
varchar -
text -
tsvector -
tsquery
real、double、numericデータ型は、NaNおよびInfinity/-Infinity特殊数値をサポートします。
特殊な値をサポートするデータベース別のデータ型の詳細は、「データベース・データ型でサポートされる特別な値」を参照してください。
初期ロードとCDCの両方のExtractで、これらの配列型がサポートされます。
ノート:初期ロードExtractでは、timeデータ型のPostgreSQL arrayはサポートされていません。
サポートの制限
-
char、varchar、textまたはbyteaデータ型の列が主キーまたは一意キーの一部である場合、これらの列の個々の最大長が8191バイトを超えることはできません。 -
Extractでは、サイズが512 MBを超える
bytea列を持つレコードは処理できません。 -
主キーの一部であるデータ型
CITEXTの列が、最大8000バイトのサイズでサポートされます。8000バイトを超える主キーの一部であるCITEXT列はサポートされません。 -
Extractでは、サイズが512 MBを超える
bytea列を持つレコードは処理できません。 -
decimal: 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パラメータ・ファイルでDBOPTIONSALLOWNONSTANDARDINTERVALDATAを使用すると、混合符号intervalデータ(またはOracle GoldenGateでサポートされない他の形式のintervalデータ)を文字列(標準のintervalデータではなく)として取得できます。
次に、Extractパラメータ・ファイルでの
DBOPTIONSALLOWNONSTANDARDINTERVALDATAの使用時に証跡ファイルに書き込まれるデータの例を示します。-
+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: ソース間隔データが
DBOPTIONSALLOWNONSTANDARDINTERVALDATAを使用してキャプチャされ、証跡に文字列として書き込まれた場合、対応するソース列はターゲットのcharまたはbinary型の列にマップできます。 -
dateの制限事項は次のとおりです。-
データ内にBCまたはADタグのある
dateデータはサポートされていません。 -
date列のInfinity/-Infinity入力文字列はサポートされていません。
-
-
text、json、xml、bytea、char (>8191)、varchar (>8191)の列はLOB列として扱われ、次の制限事項があります。-
GETUPDATEBEFORESを使用する場合、LOB列の変更前イメージがログに記録されることはありません。 -
NOCOMPRESSUPDATESを使用する場合、LOB列は、変更された場合のみ変更後イメージに記録されます。
-
-
浮動小数点数の範囲および精度のサポートは、ホスト・マシンによって異なります。一般的に、精度は16桁まで正確ですが、データベースのドキュメントを確認して、想定される近似値を決定する必要があります。Oracle GoldenGateでは、サポートされている精度を超える値は丸められますか切り捨てられます。
サポートされていないPostgreSQLデータ型
Oracle GoldenGate for PostgreSQLでは、次のデータ型はサポートされていません。
-
box -
bpchar -
circle -
Composite Types -
Domain Types -
line -
lseq -
Object Identifiers Types -
path -
pg_lsn -
pg_snapshot -
point -
polygon -
Pseudo-Types -
Range Types -
User-defined Types (UDTs) -
https://www.postgresql.org/docs/current/contrib.htmlにリストされている拡張および追加提供モジュールは、「サポートされているPostgreSQLデータ型」に明示的にリストされていないかぎり、Oracle GoldenGateではサポートされません。ノート: Extractパラメータ・ファイルにサポートされていないデータ型の表が含まれている場合、Extractはエラー・メッセージとともに停止します。レプリケーションを再開するには、Extractファイルから表を削除するか、サポートされていないデータ型の列をその表から削除します。
PostgreSQLについてサポートされているオブジェクトおよび操作
-
Oracle GoldenGate for PostgreSQLでは、DML操作(挿入/更新/削除)のみサポートされます。DDLレプリケーションはサポートされていません。
-
Oracle GoldenGate for PostgreSQLでは、PostgreSQL 11以上から開始した切捨て操作のレプリケーションがサポートされており、ExtractおよびReplicatにおいて
GETTRUNCATESパラメータが必要になります。 -
複数の切捨て操作は、
pgoutput pluginでのみサポートされています。 -
大/小文字を区別する名前と区別しない名前の使用:
-
引用符で囲まれていない名前は、大/小文字の区別がなく、暗黙的に小文字です。たとえば、
CREATE TABLE MixedCaseTableとSELECT * FROM mixedcasetableは同等です。 -
引用符によって囲まれた表名および列名は大/小文字が識別され、ExtractとReplicatsで、およびOracle GoldenGateコマンドで、正しくリストされている必要があります。
たとえば、大/小文字が識別される表名をサポートするには、
TABLE appschema."MixedCaseTable"およびADD TRANDATA appschema."MixedCaseTable"が必要です。 -
表、ビューおよびマテリアライズド・ビュー
キャプチャと配信の対象に含める表は次の要件を満たし、サポートされているPostgreSQLデータ型にリストされたデータ型のみを含む必要があります。
-
Oracle GoldenGate for PostgreSQLでは、ユーザー表からトランザクション的なDMLの取得、およびユーザー表への配信がサポートされます。
-
Oracle GoldenGate for PostgreSQL (バージョン21.14.0.0.0以降)では、実パーティション表への取得および配信がサポートされています。PostgreSQLパーティション表からデータを取得するには、すべてのパーティションの「レプリカ・アイデンティティ」設定が、実パーティション表の「レプリカ・アイデンティティ」設定と一致する必要があります。これは、マルチレベル・パーティション表にも適用されます。
次のいずれかの方法を選択して、この構成を設定できます。
-
ベース・パーティション表のすべてのパーティションまたは必要なパーティションに対して、
ADD TRANDATAコマンドを実行します。ADD TRANDATA *partition-name* ALLCOLS -
ベース・パーティション表のすべてのパーティションまたは必要なパーティションに対して、
ALTER TABLEコマンドを実行します。ALTER TABLE *partition-name* REPLICA IDENTITY *replica-identity-setting*
-
-
グローバリゼーションは、オブジェクト名(表名/スキーマ名/データベース名/列名)および列データでサポートされています。
-
マテリアライズド・ビューの取得および配信がサポートされています。
-
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を指定して定義します。たとえば、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。
MINVALUEを3にして、INCREMENT BYを3に設定します。