PostgreSQL: サポートされているデータ型、オブジェクトおよび操作
Oracle GoldenGate for PostgreSQLでは、サポートされるPostgreSQLデータベース・バージョンの初期ロードおよびトランザクション・データの取得と配信がサポートされます。
Oracle GoldenGate for PostgreSQLでは、ソース・データのマッピング、フィルタリングおよび変換がサポートされており、このドキュメントで特に明記されている場合を除き、Oracle GoldenGateでサポートされている他のソース・データベースから導出されたデータのPostgreSQLデータベースへのレプリケーションもサポートされています。
サポートされているデータベース
-
キャプチャおよび配信でサポートされているのはユーザー・データベースのみです。
-
Oracle GoldenGateでは、アーカイブされたログからの取得はサポートされません。
-
配信は、レプリカ、スタンバイ・データベースに対してはサポートされていません。
-
キャプチャは、レプリカ、スタンバイ・データベースからもサポートされています。
-
高可用性。詳細は、「高可用性に関する考慮事項」を参照してください。
高可用性に関する考慮事項
Oracle GoldenGateでは、PostgreSQL高可用性構成からの変更データの取得がサポートされています。この機能は、PostgreSQLデータベース・バージョン16以上でのみ使用できます。チェンジ・データ・キャプチャは、高可用性設定におけるプライマリ・サーバーまたは任意の読取り専用スタンバイ・サーバーで構成できます。フェイルオーバー時に発生する可能性があるデータ損失と手動操作を回避するために、Oracle GoldenGateでは、高可用性設定を、同期レプリケーションを使用して構成することをお薦めしています。
データ損失と手動操作の考えられるシナリオの詳細は、『Oracle GoldenGate procedures for PostgreSQL High Availability Failover』(ドキュメントID 2818379.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
文を実行します。ノート:
スタンバイでのレプリケーション・スロット作成に関する重要なノート: 読取り専用スタンバイ・サーバーでレプリケーション・スロットの作成が試みられた場合(REGISTER EXTRACT
コマンドまたはpg_create_logical_replication_slot
文を使用)、その操作は、高可用性設定におけるプライマリ・サーバー上の任意の表に対していくつかのDML (任意のランダムDMLでかまわない)が実行された後にのみ完了します。別の方法としては、ハートビート機能をプライマリ・サーバー上で有効にできます。それにより、必要なDMLアクティビティがプライマリ上で発生して、スタンバイ・サーバー上でのレプリケーション・スロット作成を完了させることができます。
-
-
ADD TRANDATA
またはDELETE TRANDATA
コマンドは、PostgreSQL高可用性設定における読取り専用スタンバイ・サーバーではサポートされていません。読取り専用スタンバイ・サーバーにある表のREPLICA IDENTITY
設定は、プライマリ・サーバーにある対応する表のREPLICA IDENTITY
設定と同じになります。 -
データ取得が読取り専用スタンバイ・サーバー上で構成されているときにハートビート機能を使用するには、ハートビート機能をプライマリ・サーバー上で有効にする必要があります。
-
フェイルオーバーについては、フェイルオーバー後に目的のノード(要件に基づいてプライマリ/スタンバイのどちらか)に接続してデータ取得を続行するように、Extractパラメータ・ファイルを変更する必要があります。
例
PostgreSQL高可用性クラスタ内に3つのノードがあり、対応する接続別名がある状況について考えてみます:
Node1 (現在のプライマリ)、対応する接続別名:
node1
Node2 (スタンバイ)、対応する接続別名:
node2
Node3 (スタンバイ)、対応する接続別名:
node3
フェイルオーバーの前に、これらのノードのどれか(node2
など)からデータを取得するようにExtractが構成されている場合は、Extractパラメータ・ファイルに次のようなエントリが含まれます。USERIDALIAS node2
フェイルオーバーの発生時に、プライマリ・ノード(node1
)が停止し、セカンダリ・ノード(node2
)が新しいプライマリになる場合は、次の2つの可能性があります:-
同じ
node2
からのデータ取得を続行するには:-
Extractパラメータ・ファイル内に変更は必要ありません。
-
Extractを再起動します。
-
-
データを必ず別のノードから取得するには:
-
目的のノード(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
-
timestamp
、timestampz
、time
、timetz
-
varbit
-
varchar
-
text
-
tsvector
-
tsquery
初期ロードとCDCの両方のExtractで、これらの配列型がサポートされます。
ノート:
初期ロードExtractでは、time
データ型のPostgreSQL array
はサポートされていません。
サポートの制限事項
-
char
、varchar
、text
またはbytea
データ型の列が主キーまたは一意キーの一部である場合、これらの列の個々の最大長が8191バイトを超えることはできません。 -
Extractでは、サイズが512 MBを超える
bytea
列を持つレコードは処理できません。 -
主キーの一部であるデータ型
CITEXT
の列は、最大8000バイトのサイズでサポートされます。8000バイトを超える主キーの一部であるCITEXT
列はサポートされません。 -
Extractでは、サイズが512 MBを超える
bytea
列を持つレコードは処理できません。 -
real
、double
、numeric
、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パラメータ・ファイルで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
入力文字列はサポートされていません。
-
-
text
、json
、xml
、bytea
、char (>8191)
、varchar (>8191)
の列はLOB列として扱われ、次の制限事項があります。-
GETUPDATEBEFORES
を使用する場合、LOB列の変更前イメージは記録されません。 -
NOCOMPRESSUPDATES
を使用する場合、LOB
列は変更された場合のみ変更後イメージに記録されます。
-
-
浮動小数点数の範囲および精度のサポートは、ホスト・マシンによって異なります。通常は有効桁数が16桁の精度ですが、データベースのドキュメントで想定されている近似について確認してください。Oracle GoldenGateでは、サポートされる精度を超える値は丸められるか切り捨てられます。
サポートされていないPostgreSQLデータ型
-
box
-
bpchar
-
circle
-
コンポジット型
-
ドメイン・タイプ
-
line
-
lseq
-
オブジェクト識別子タイプ
-
path
-
pg_lsn
-
pg_snapshot
-
point
-
polygon
-
疑似型
-
範囲タイプ
-
ユーザー定義型(UDT)
-
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
パラメータが必要です。 -
大/小文字を区別する名前と区別しない名前の使用:
-
引用符で囲まれていない名前は、大/小文字の区別がなく、暗黙的に小文字です。たとえば、
CREATE TABLE MixedCaseTable
とSELECT * 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 B
Yを3にして、MINVALUE
を3に設定します。