PostgreSQL: 지원되는 데이터 유형, 객체 및 작업
PostgreSQL용 Oracle GoldenGate는 지원되는 PostgreSQL 데이터베이스 버전에 대한 초기 로드 및 트랜잭션 데이터의 캡처 및 전달을 지원합니다.
PostgreSQL용 Oracle GoldenGate는 본 문서에서 별도로 언급하지 않는 한 소스 데이터의 매핑, 필터링 및 변환을 지원하고, Oracle GoldenGate가 지원하는 다른 소스 데이터베이스에서 파생된 데이터를 PostgreSQL 데이터베이스로 복제합니다.
지원되는 데이터베이스
다음은 Oracle GoldenGate for PostgreSQL에 대해 지원되는 데이터베이스 및 제한 사항입니다.
-
유저 데이터베이스만 캡처 및 전달이 지원됩니다.
-
Oracle GoldenGate는 아카이브된 로그로부터의 캡처를 지원하지 않습니다.
-
복제본, 대기 데이터베이스에 대해서는 전달이 지원되지 않습니다.
-
캡처는 복제본, 대기 데이터베이스에서도 지원됩니다.
-
고가용성. 자세한 내용은 고가용성 고려 사항을 참조하십시오.
고가용성(High Availability) 고려 사항
Oracle GoldenGate는 PostgreSQL 고가용성 구성에서 변경 데이터 캡처를 지원합니다. 이 기능은 PostgreSQL 데이터베이스 버전 16 이상에서만 사용할 수 있습니다. 변경 데이터 캡처는 고가용성(High Availability) 설정의 기본 서버 또는 읽기 전용 대기 서버에서 구성할 수 있습니다. 페일오버 시 데이터 손실 및 수동 개입이 발생하지 않도록 하기 위해 Oracle GoldenGate는 동기식 복제를 사용하여 고가용성 설정을 구성할 것을 권장합니다.
가능한 데이터 손실 및 수동 개입 시나리오에 대한 자세한 내용은 PostgreSQL 고가용성 복구 문서 ID 2818379.1에 대한 Oracle GoldenGate 절차를 참조하십시오.
PostgreSQL 고가용성 설정에서 CDC Extract를 구성하려면 다음 태스크를 수행합니다. 1. 추출은 고가용성 설정에서 기본 서버 또는 읽기 전용 대기 서버에서 데이터를 캡처하도록 구성할 수 있습니다.
-
Extract가 한 노드(기본 또는 대기)에서 구성된 경우 데이터 캡처를 시작하기 전에 High Availability 설정의 다른 모든 노드에서 이름이 동일한 복제 슬롯을 동시에 만들어야 합니다.
-
다음 예와 같이
REGISTER EXTRACT명령을 사용하여 한 서버에 복제 슬롯을 만듭니다(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문을 실행합니다. 주: 반복 SLOT CREATION ON STANDBY에 대한 중요 참고 사항: 읽기 전용 대기 서버에서 복제 슬롯 생성을 시도할 때(REGISTER EXTRACT명령 또는pg_create_logical_replication_slot문 사용) 고가용성 설정에서 기본 서버의 모든 테이블에서 일부 DML(임의 DML일 수 있음)이 실행된 후에만 작업이 완료됩니다. 또는 기본 서버에서 하트비트 기능을 사용으로 설정하면 기본 서버에서 필요한 DML 작업이 대기 서버에서 복제 슬롯 생성을 완료할 수 있습니다.
-
-
PostgreSQL 고가용성 설정의 읽기 전용 대기 서버에서는
ADD TRANDATA또는DELETE TRANDATA명령이 지원되지 않습니다. 읽기 전용 대기 서버에 있는 테이블의REPLICA IDENTITY설정은 기본 서버에 있는 해당 테이블의REPLICA IDENTITY설정과 동일합니다. -
읽기 전용 대기 서버에서 데이터 캡처가 구성된 경우 하트비트 기능을 사용하려면 기본 서버에서 하트비트 기능을 사용으로 설정해야 합니다.
-
복구의 경우 복구 후 데이터 캡처를 계속하려면 원하는 노드(요구 사항에 따라 기본/대기)에 연결하도록 추출 매개변수 파일을 수정해야 합니다.
예제
PostgreSQL 고가용성 클러스터에 해당하는 연결 별칭이 있는 세 개의 노드가 있는 경우를 고려해 보십시오.
해당 연결 별칭이 있는 Node1(현재 기본):
node1해당 연결 별칭이 있는 Node2(대기):
node2해당 연결 별칭이 있는 Node3(대기):
node3페일오버 전에 Extract가 노드 중 하나(예:
node2)에서 데이터를 캡처하도록 구성된 경우 Extract 매개변수 파일에 다음과 유사한 항목이 포함됩니다.USERIDALIAS node2대체 시스템 작동의 경우, 기본 노드(
node1)의 작동이 중지되고 보조 노드(node2)가 새 기본 노드가 되는 경우 두 가지 가능성이 있습니다.-
동일한
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는 크기가 512MB를 초과하는
bytea열이 있는 레코드를 처리할 수 없습니다. -
기본 키의 일부인 데이터 유형
CITEXT의 열은 최대 8000바이트까지 지원됩니다. 8000바이트보다 크고 기본 키의 일부인CITEXT열은 지원되지 않습니다. -
Extract는 크기가 512MB를 초과하는
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 데이터 유형
PostgreSQL용 Oracle GoldenGate는 다음 데이터 유형을 지원하지 않습니다.
-
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에 대해 지원되는 객체 및 작업
-
PostgreSQL용 Oracle GoldenGate는 DML 작업(삽입/업데이트/삭제)만 지원합니다. DDL 복제는 지원되지 않습니다.
-
PostgreSQL용 Oracle GoldenGate는 PostgreSQL 11 이상부터 자르기 작업의 복제를 지원하며 Extract 및 Replicat에서
GETTRUNCATES매개변수가 필요합니다. -
여러 자르기 작업은
pgoutput plugin에서만 지원됩니다. -
대소문자/비구분 이름 사용법:
-
따옴표로 묶이지 않은 이름은 대소문자를 구분하지 않으며 암시적으로 소문자입니다. 예를 들어,
CREATE TABLE MixedCaseTable및SELECT * FROM mixedcasetable는 동일합니다. -
따옴표로 묶인 테이블 및 열 이름은 대소문자를 구분하며 Extracts 및 Replicats 및 Oracle GoldenGate 명령을 사용하여 올바르게 나열되어야 합니다.
예를 들어, 대소문자를 구분하는 테이블 이름을 지원하려면
TABLE appschema."MixedCaseTable"및ADD TRANDATA appschema."MixedCaseTable"가 필요합니다. -
테이블, 뷰 및 Materialized View
캡처 및 전달을 위해 포함할 테이블은 다음 요구 사항을 충족해야 하며 지원되는 PostgreSQL 데이터 유형 아래에 나열된 데이터 유형만 포함해야 합니다.
-
Oracle GoldenGate for PostgreSQL는 사용자 테이블에서 트랜잭션 DML 캡처 및 사용자 테이블로 전달을 지원합니다.
-
PostgreSQL용 Oracle GoldenGate, 버전 21.14.0.0.0 이상은 기본 분할 테이블로 캡처 및 전달을 지원합니다. PostgreSQL 분할된 테이블의 데이터를 캡처하려면 모든 분할 영역의 [복제 ID] 설정이 기본 분할된 테이블의 [복제 ID] 설정과 일치해야 합니다. 이는 다중 레벨 분할 테이블에도 적용할 수 있습니다.
다음 방법 중 하나를 선택하여 이 구성을 설정할 수 있습니다.
-
기본 분할된 테이블의 전체 또는 필수 분할 영역에 대해
ADD TRANDATA명령을 실행합니다.ADD TRANDATA *partition-name* ALLCOLS -
기본 분할 테이블의 전체 또는 필수 분할 영역에 대해
ALTER TABLE명령을 실행합니다.ALTER TABLE *partition-name* REPLICA IDENTITY *replica-identity-setting*
-
-
전역화는 객체 이름(테이블 /schema/database/column 이름) 및 열 데이터에 대해 지원됩니다.
-
구체화된 뷰에 대한 캡처 및 전달이 지원됩니다.
-
추출 프로세스는 고유 인덱스가 있어야 하고 동시에 새로 고쳐야 하는 구체화된 뷰를 지원합니다.
-
CDR, UNIFIED FORMAT RECORD및NOCOMPRESSDELETES, GETUPDATEBEFORES를 지원할 수 있도록 구체화된 뷰의 복제본 ID를FULL로 설정해야 합니다. 또한 구체화된 뷰에서WAL DELETE레코드를 처리하려면 복제본 IDFULL설정이 필요합니다. 구체화된 뷰에 대한 복제본 ID가FULL로 설정되지 않은 경우 Extract가DELETE레코드를 처리하지 않습니다.복제본 ID를 FULL로 설정하려면 다음 명령을 사용합니다.
add trandata *schema.materialized_view*, ALLCOLS -
UPDATE또는PK UPDATE에 대한 통계는DELETE와INSERT로 기록됩니다. 추출 통계에 변형이 표시되지만 소스 및 대상 구체화된 뷰 데이터를 비교할 때 데이터 동기화가 올바릅니다. -
PK UPDATE는DELETE다음에INSERT가 표시되므로 추출 통계는 데이터베이스 행 수와 다르게 표시됩니다. Materialized view 레코드를 포함하는 소스 데이터와 대상 데이터 간의 데이터 무결성을 검사하려면 데이터 비교 도구를 사용해야 합니다. -
Replicat 프로세스에서는 추적의 데이터를 구체화된 뷰에 적용할 수 없습니다. 대신 트레일에서 다른 테이블로 Materialized view 데이터를 매핑할 수 있습니다.
제한 사항
-
PostgreSQL용 Oracle GoldenGate는 뷰에 대한 캡처 및 전달을 지원하지 않습니다.
-
PostgreSQL용 Oracle GoldenGate는 분할된 테이블의 개별 분할 영역에서의 캡처를 지원하지 않습니다.
시퀀스 및 ID 열
-
순서는 단방향, 양방향 및 다방향 구현에 대해 소스 및 대상 테이블에서 지원됩니다.
-
GENERATED BY DEFAULT AS IDENTITY절을 사용하여 생성된 ID 열은 단방향, 양방향 및 다방향 구현에 대해 소스 및 대상 테이블에서 지원됩니다. -
GENERATED ALWAYS AS IDENTITY절을 사용하여 생성된 ID 열은 대상 데이터베이스 테이블에서 지원되지 않으며, ID 속성은 대상 테이블에서 제거되거나GENERATED BY DEFAULT AS IDENTITY로 변경되어야 합니다. -
양방향 및 다방향 구현의 경우 ID 열 및 시퀀스를 구성의 서버 수와 동일한
INCREMENT BY값으로 정의하고 각각에 대해 서로 다른MINVALUE를 사용합니다.예를 들어 양방향의 2-데이터베이스 구성에 대한
MINVALUE/INCREMENT BY값은 다음과 같습니다.Database1에서
MINVALUE를 1로 설정하고INCREMENT BY를 2로 설정합니다.Database2에서
MINVALUE를 2로 설정하고INCREMENT BY를 2로 설정합니다.예를 들어, 다중 방향의 3-데이터베이스 구성에 대한
MINVALUE/INCREMENT BY값은 다음과 같습니다.Database1에서
MINVALUE를 1로 설정하고INCREMENT BY를 3으로 설정합니다.Database2에서
MINVALUE를 2로 설정하고INCREMENT BY를 3으로 설정합니다.Database3에서
MINVALUE을 3으로 설정하고INCREMENT BY를 3으로 설정합니다.