PostgreSQL 데이터베이스를 소스로 AWS DMS 사용 - AWS 데이터베이스 마이그레이션 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

PostgreSQL 데이터베이스를 소스로 AWS DMS 사용

를 사용하여 하나 이상의 PostgreSQL 데이터베이스에서 데이터를 마이그레이션할 수 있습니다 AWS DMS. PostgreSQL 데이터베이스를 소스로 사용하면 다른 PostgreSQL 데이터베이스 또는 지원되는 다른 데이터베이스 중 하나로 데이터를 마이그레이션할 수 있습니다.

가 소스로 AWS DMS 지원하는 PostgreSQL 버전에 대한 자세한 내용은 섹션을 참조하세요에 대한 소스 AWS DMS.

AWS DMS 는 다음과 같은 유형의 데이터베이스에 대해 PostgreSQL를 지원합니다.

  •  온프레미스 데이터베이스

  • Amazon EC2 인스턴스의 데이터베이스

  • Amazon RDS DB 인스턴스의 데이터베이스

  • Amazon Aurora Postgre SQL-Compatible Edition 기반 DB 인스턴스의 데이터베이스

  • Amazon Aurora Postgre SQL-Compatible Serverless Edition 기반 DB 인스턴스의 데이터베이스

참고

DMS 는 Amazon Aurora Postgre SQL—Serverless V1을 전체 로드 전용 소스로 지원합니다. 하지만 Amazon Aurora Postgre SQL—Serverless V2를 전체 로드, 전체 로드 + CDC및 태스크 CDC 전용 소스로 사용할 수 있습니다.

PostgreSQL 소스 버전

AWS DMS 사용할 버전

9.x, 10.x, 11.x, 12.x

사용 가능한 AWS DMS 버전을 사용합니다.

13.x

AWS DMS 버전 3.4.3 이상을 사용합니다.

14.x

AWS DMS 버전 3.4.7 이상을 사용합니다.

15.x

AWS DMS 버전 3.5.1 이상을 사용합니다.

16.x

AWS DMS 버전 3.5.3 이상을 사용합니다.

Secure Socket Layers(SSL)를 사용하여 PostgreSQL 엔드포인트와 복제 인스턴스 간의 연결을 암호화할 수 있습니다. PostgreSQL 엔드포인트와 SSL 함께 를 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요SSL 사용: AWS Database Migration Service.

PostgreSQL를 소스로 사용할 때 추가 보안 요구 사항으로 지정된 사용자 계정은 PostgreSQL 데이터베이스에 등록된 사용자여야 합니다.

PostgreSQL 데이터베이스를 AWS DMS 소스 엔드포인트로 구성하려면 다음을 수행합니다.

에서 자체 관리형 PostgreSQL 데이터베이스를 소스로 사용 AWS DMS

자체 관리형 PostgreSQL 데이터베이스를 소스로 사용하면 다른 PostgreSQL 데이터베이스 또는 에서 지원하는 다른 대상 데이터베이스 중 하나로 데이터를 마이그레이션할 수 있습니다 AWS DMS. 데이터베이스 소스는 온프레미스 데이터베이스 또는 Amazon EC2 인스턴스에서 실행되는 자체 관리형 엔진일 수 있습니다. DB 인스턴스는 전체 로드 작업과 데이터 캡처(CDC) 변경 작업에 모두 사용할 수 있습니다.

자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하기 위한 사전 조건

자체 관리형 PostgreSQL 소스 데이터베이스에서 데이터를 마이그레이션하기 전에 다음을 수행합니다.

  • 버전 9.4.x 이상의 PostgreSQL 데이터베이스를 사용해야 합니다.

  • 전체 로드 플러스 CDC 작업 또는 CDC전용 작업의 경우 PostgreSQL 소스 데이터베이스에 지정된 사용자 계정에 대한 수퍼유저 권한을 부여합니다. 사용자 계정이 소스의 복제 관련 함수에 액세스하려면 슈퍼유저 권한이 필요합니다. 전체 로드 전용 작업의 경우 사용자 계정에 테이블의 SELECT 마이그레이션 권한이 필요합니다.

  • AWS DMS 복제 서버의 IP 주소를 pg_hba.conf 구성 파일에 추가하고 복제 및 소켓 연결을 활성화합니다. 예를 들면 다음과 같습니다.

    # Replication Instance host all all 12.3.4.56/00 md5 # Allow replication connections from localhost, by a user with the # replication privilege. host replication dms 12.3.4.56/00 md5

    Postgre SQL의 pg_hba.conf 구성 파일은 클라이언트 인증을 제어합니다. (HBA는 호스트 기반 인증을 나타냅니다.) 이 파일은 일반적으로 데이터베이스 클러스터의 데이터 디렉터리에 저장됩니다.

  • 를 사용하여 데이터베이스를 논리적 복제를 위한 소스로 구성하는 경우 AWS DMS 섹션을 참조하세요. 자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 CDC 사용 활성화

참고

일부 AWS DMS 트랜잭션은 DMS 엔진이 다시 사용하기 전에 잠시 유휴 상태입니다. idle_in_transaction_session_timeout PostgreSQL 버전 9.6 이상의 파라미터를 사용하면 유휴 트랜잭션이 시간 초과 및 실패할 수 있습니다. AWS DMS를 사용할 때는 유휴 트랜잭션을 종료하지 마십시오.

자체 관리형 PostgreSQL 데이터베이스를 AWS DMS 소스로 CDC 사용 활성화

AWS DMS 는 논리적 복제를 사용하여 데이터 캡처 변경(CDC)을 지원합니다. 자체 관리형 PostgreSQL 소스 데이터베이스의 논리적 복제를 활성화하려면 postgresql.conf 구성 파일에서 다음 파라미터와 값을 설정합니다.

  • wal_level = logical을 설정합니다.

  • max_replication_slots를 1보다 큰 값으로 설정합니다.

    실행할 작업 개수에 따라 max_replication_slots 값을 설정합니다. 예를 들어, 5개 작업을 실행하려면 최소 5개의 슬롯을 설정해야 합니다. 작업이 시작된 즉시 슬롯이 자동으로 열리고 작업이 더 이상 실행되지 않더라도 계속 열려 있습니다. 열린 슬롯은 반드시 수동으로 삭제하세요. 참고로 는 작업이 삭제될 때 슬롯을 DMS 생성하면 복제 슬롯을 DMS 자동으로 삭제합니다.

  • max_wal_senders를 1보다 큰 값으로 설정합니다.

    max_wal_senders 파라미터는 실행 가능한 동시 작업 개수를 설정합니다.

  • wal_sender_timeout 파라미터는 지정된 밀리초보다 오래 사용되지 않는 복제 연결을 종료합니다. 온프레미스 PostgreSQL 데이터베이스의 기본값은 60,000밀리초(60초)입니다. 값을 0(0)으로 설정하면 제한 시간 메커니즘이 비활성화되며 에 유효한 설정입니다DMS.

    0wal_sender_timeout이 아닌 값으로 설정할 때 를 사용하는 DMS 태스크는 최소 10,000밀리초(10초)가 CDC 필요하며 값이 10,000보다 작으면 실패합니다. DMS 복제 인스턴스의 다중 AZ 장애 조치 중에 지연이 발생하지 않도록 값을 5분 미만으로 유지합니다.

일부 파라미터는 정적이며 서버 시작 시에만 설정할 수 있습니다. 구성 파일(자체 관리형 데이터베이스의 경우) 또는 DB 파라미터 그룹(PostgreSQL 데이터베이스의 경우)의 항목에 RDS 대한 모든 변경 사항은 서버를 다시 시작할 때까지 무시됩니다. 자세한 내용은 PostgreSQL 설명서 를 참조하세요.

활성화에 대한 자세한 내용은 섹션을 CDC참조하세요논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화.

관리 AWS형 PostgreSQL 데이터베이스를 DMS 소스로 사용

관리 AWS형 PostgreSQL DB 인스턴스를 의 소스로 사용할 수 있습니다 AWS DMS. AWS관리형 PostgreSQL 소스를 사용하여 전체 로드 작업을 수행하고 데이터 캡처(CDC) 작업을 변경할 수 있습니다.

관리 AWS형 PostgreSQL 데이터베이스를 DMS 소스로 사용하기 위한 사전 조건

AWS관리형 PostgreSQL 소스 데이터베이스에서 데이터를 마이그레이션하기 전에 다음을 수행합니다.

  • PostgreSQL DB 인스턴스에 필요한 최소 권한이 있는 AWS 사용자 계정을 의 PostgreSQL 소스 엔드포인트에 대한 사용자 계정으로 사용하는 것이 좋습니다 AWS DMS. 마스터 계정을 사용하는 것은 권장되지 않습니다. 계정에는 rds_superuser 역할과 rds_replication 역할이 있어야 합니다. rds_replication 역할은 논리적 슬롯을 관리하고 논리적 슬롯을 사용하여 데이터를 스트리밍할 수 있는 권한을 부여합니다.

    사용하는 계정의 마스터 사용자 계정에서 여러 객체를 생성해야 합니다. 객체 생성에 대한 자세한 내용은 마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션 섹션을 참조하세요.

  • 소스 데이터베이스가 가상 프라이빗 클라우드(VPC)에 있는 경우 데이터베이스가 있는 DB 인스턴스에 대한 액세스를 제공하는 VPC 보안 그룹을 선택합니다. 이는 DMS 복제 인스턴스가 소스 DB 인스턴스에 성공적으로 연결하는 데 필요합니다. 데이터베이스 및 DMS 복제 인스턴스가 동일한 에 있는 경우 적절한 보안 그룹을 자체 인바운드 규칙에 VPC추가합니다.

참고

일부 AWS DMS 트랜잭션은 DMS 엔진이 다시 사용하기 전에 잠시 유휴 상태입니다. idle_in_transaction_session_timeout PostgreSQL 버전 9.6 이상의 파라미터를 사용하면 유휴 트랜잭션이 시간 초과 및 실패할 수 있습니다. AWS DMS를 사용할 때는 유휴 트랜잭션을 종료하지 마십시오.

를 CDC 사용하여 관리 AWS형 PostgreSQL DB 인스턴스 활성화 AWS DMS

AWS DMS 는 DB 인스턴스CDC가 논리적 복제를 사용하도록 구성된 경우 Amazon RDS PostgreSQL 데이터베이스에서 를 지원합니다. 다음 표에는 AWS관리형 PostgreSQL 버전별 논리적 복제 호환성이 요약되어 있습니다.

RDS PostgreSQL 읽기 전용 복제본은 CDC (진행 중인 복제)에 사용할 수 없습니다.

PostgreSQL 버전

AWS DMS 전체 로드 지원

AWS DMS CDC 지원

PostgreSQL 10.5(또는 이하)와 호환되는 Aurora PostgreSQL 버전 2.1

아니요

Aurora PostgreSQL 버전 2.2와 PostgreSQL 10.6 호환(또는 이상)

RDS PostgreSQL 10.21 호환성(또는 이상)을 갖춘 PostgreSQL용

RDS PostgreSQL DB 인스턴스에 대한 논리적 복제를 활성화하려면
  1. PostgreSQL DB 인스턴스의 AWS 마스터 사용자 계정을 PostgreSQL 소스 엔드포인트의 사용자 계정으로 사용합니다. 마스터 사용자 계정에는 를 설정할 수 있는 필수 역할이 있습니다CDC.

    마스터 사용자 계정 이외의 계정을 사용하는 경우, 사용하는 계정의 마스터 사용자 계정에서 여러 객체를 생성해야 합니다. 자세한 내용은 마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션 단원을 참조하십시오.

  2. DB rds.logical_replication 파라미터 그룹의 CLUSTER 파라미터를 1로 설정합니다. 이 정적 파라미터를 적용하려면 DB 인스턴스를 재부팅해야 합니다. 이 파라미터를 적용하는 중에 AWS DMS 에서는 wal_level, max_wal_senders, max_replication_slots, max_connections 파라미터를 설정합니다. 이러한 파라미터 변경은 쓰기 사전 로그(WAL) 생성을 증가시킬 수 있으므로 논리적 복제 슬롯을 사용할 rds.logical_replication 때만 설정할 수 있습니다.

  3. wal_sender_timeout 파라미터는 지정된 밀리초보다 오래 사용되지 않는 복제 연결을 종료합니다. 관리 AWS형 PostgreSQL 데이터베이스의 기본값은 30,000밀리초(30초)입니다. 값을 0(0)으로 설정하면 제한 시간 메커니즘이 비활성화되며 에 유효한 설정입니다DMS.

    0wal_sender_timeout이 아닌 값으로 설정할 때 를 사용하는 DMS 태스크는 최소 10,000밀리초(10초)가 CDC 필요하며 값이 0~10,000 사이인 경우 실패합니다. DMS 복제 인스턴스의 다중 AZ 장애 조치 중에 지연이 발생하지 않도록 값을 5분 미만으로 유지합니다.

  4. DB 클러스터 파라미터 그룹의 max_worker_processes 파라미터 값이 max_logical_replication_workers, autovacuum_max_workers, max_parallel_workers의 총 합계 값과 같거나 더 큰지 확인합니다. 백그라운드 작업자 프로세스 수가 많으면 소규모 인스턴스의 애플리케이션 워크로드에 영향을 미칠 수 있습니다. 따라서 max_worker_processes를 기본값보다 높게 설정한 경우, 데이터베이스의 성능을 모니터링하세요.

  5. Aurora PostgreSQL를 와 함께 소스로 사용하는 경우 synchronous_commit를 로 CDC설정합니다ON.

마스터 사용자 계정을 사용하지 않고 Amazon RDS for PostgreSQL 데이터베이스 마이그레이션

경우에 따라 소스로 사용 중인 Amazon RDS PostgreSQL DB 인스턴스의 마스터 사용자 계정을 사용하지 못할 수 있습니다. 이러한 경우 여러 객체를 생성하여 데이터 정의 언어(DDL) 이벤트를 캡처합니다. 마스터 계정 이외의 계정에서 이 객체를 생성하고 나서 마스터 사용자 계정에서 트리거를 생성합니다.

참고

소스 엔드포인트에서 CaptureDdls 엔드포인트 설정을 false로 설정하는 경우, 소스 데이터베이스에 다음 테이블 및 트리거를 생성할 필요가 없습니다.

다음 절차에 따라 이 객체를 생성합니다.

객체를 생성하려면
  1. 객체가 생성되는 위치에 있는 스키마를 선택합니다. 기본 스키마는 public입니다. 스키마가 있는지와 이 스키마를 OtherThanMaster 계정으로 액세스할 수 있는지 확인합니다.

  2. 마스터 계정 이외의 사용자 계정을 사용하여 PostgreSQL DB 인스턴스에 로그인합니다. 여기서 OtherThanMaster 계정을 선택합니다.

  3. 다음 명령을 실행하여 테이블 awsdms_ddl_audit를 생성하고, 다음 코드의 objects_schema를 사용할 스키마 이름으로 대체합니다.

    CREATE TABLE objects_schema.awsdms_ddl_audit ( c_key bigserial primary key, c_time timestamp, -- Informational c_user varchar(64), -- Informational: current_user c_txn varchar(16), -- Informational: current transaction c_tag varchar(24), -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE' c_oid integer, -- For future use - TG_OBJECTID c_name varchar(64), -- For future use - TG_OBJECTNAME c_schema varchar(64), -- For future use - TG_SCHEMANAME. For now - holds current_schema c_ddlqry text -- The DDL query associated with the current DDL event );
  4. 다음 코드의 awsdms_intercept_ddl를 사용할 스키마의 이름으로 바꿔서 다음 명령을 실행하여 objects_schema 함수를 생성합니다.

    CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl() RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS $$ declare _qry text; BEGIN if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then SELECT current_query() into _qry; insert into objects_schema.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete from objects_schema.awsdms_ddl_audit; end if; END; $$;
  5. OtherThanMaster 계정에서 로그아웃하고 rds_superuser 역할이 할당된 계정으로 로그인합니다.

  6. 다음 명령을 실행하여 이벤트 트리거 awsdms_intercept_ddl을 생성합니다.

    CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
  7. 이러한 이벤트에 액세스하는 모든 사용자와 역할에 필요한 DDL 권한이 있는지 확인합니다. 예:

    grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;

이전 절차를 완료하면, OtherThanMaster 계정을 사용하여 AWS DMS 소스 엔드포인트를 생성할 수 있습니다.

참고

이러한 이벤트는 CREATE TABLE, ALTER TABLE, DROP TABLE 문에 의해 트리거됩니다.

논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화

Postgre SQL의 기본 논리적 복제 기능을 사용하여 PostgreSQL 소스에 대한 데이터베이스 마이그레이션 중에 변경 데이터 캡처(CDC)를 활성화할 수 있습니다. 이 기능은 자체 관리형 PostgreSQL 및 Amazon RDS for PostgreSQL SQL DB 인스턴스와 함께 사용할 수 있습니다. 이 접근 방식은 가동 중지 시간을 줄이고 대상 데이터베이스가 소스 PostgreSQL 데이터베이스와 동기화되도록 하는 데 도움이 됩니다.

AWS DMS 는 기본 키가 있는 PostgreSQL 테이블CDC을 지원합니다. 테이블에 기본 키가 없는 경우 미리 쓰기 로그(WAL)에는 데이터베이스 행의 이전 이미지가 포함되지 않습니다. 이 경우 는 테이블을 업데이트할 DMS 수 없습니다. 여기서는 추가 구성 설정과 테이블 복제본 ID를 해결 방법으로 사용할 수 있습니다. 하지만 이 접근 방식을 사용하면 추가 로그가 생성될 수 있습니다. 신중하게 테스트한 후에만 테이블 복제본 ID를 해결 방법으로 사용하는 것이 좋습니다. 자세한 내용은 PostgreSQL 데이터베이스를 DMS 소스로 사용할 때 추가 구성 설정 단원을 참조하십시오.

참고

REPLICA IDENTITY FULL 는 논리적 디코딩 플러그인에서 지원되지만 pglogical 플러그인에서는 지원되지 않습니다. 자세한 내용은 pglogical 설명서를 참조하세요.

전체 로드 및 CDC 및 작업CDC의 경우, 는 논리적 복제 슬롯을 AWS DMS 사용하여 WAL 로그가 디코딩될 때까지 복제용 로그를 유지합니다. 전체 로드 및 CDC 태스크 또는 CDC 태스크에 대해 다시 시작(재개하지 않음)하면 복제 슬롯이 다시 생성됩니다.

참고

논리적 디코딩의 경우 는 test_decoding 또는 pglogical 플러그인을 DMS 사용합니다. 원본 PostgreSQL 데이터베이스에서 pglogical 플러그인을 사용할 수 있는 경우 는 pglogical을 사용하여 복제 슬롯을 DMS 생성하며, 그렇지 않으면 test_decoding 플러그인이 사용됩니다. test_decoding 플러그인에 대한 자세한 내용은 PostgreSQL 설명서 섹션을 참조하세요.

데이터베이스 파라미터max_slot_wal_keep_size가 기본값이 아닌 값으로 설정되고 복제 슬롯restart_lsn의 이 현재보다 LSN 더 크면 필수 WAL 파일 제거로 인해 DMS 작업이 실패합니다.

pglogical 플러그인 구성

PostgreSQL 확장으로 구현된 pglogical 플러그인은 선택적 데이터 복제를 위한 논리적 복제 시스템 및 모델입니다. 다음 표는 pglogical 플러그인을 지원하는 소스 PostgreSQL 데이터베이스 버전을 식별합니다.

PostgreSQL 소스

pglogical 지원

자체 관리형 PostgreSQL 9.4 이상

Amazon RDS PostgreSQL 9.5 이하

아니요

Amazon RDS PostgreSQL 9.6 이상

Aurora PostgreSQL 1.x에서 2.5.x까지

아니요

Aurora PostgreSQL 2.6.x 이상

Aurora PostgreSQL 3.3.x 이상

와 함께 사용하도록 pglogical을 구성하기 전에 AWS DMS먼저 PostgreSQL 소스 데이터베이스에서 변경 데이터 캡처(CDC)에 대한 논리적 복제를 활성화합니다.

PostgreSQL 소스 데이터베이스에서 논리적 복제를 활성화한 후 다음 단계에 따라 와 함께 사용할 pglogical을 구성합니다DMS.

를 사용하여 PostgreSQL 소스 데이터베이스에서 논리적 복제에 pglogical 플러그인을 사용하려면 AWS DMS
  1. 소스 PostgreSQL 데이터베이스에 pglogical 확장을 생성합니다.

    1. 올바른 파라미터를 설정하세요.

      • 자체 관리형 PostgreSQL 데이터베이스의 경우 데이터베이스 파라미터 를 설정합니다shared_preload_libraries= 'pglogical'.

      • Amazon RDS 및 Amazon Aurora PostgreSQL SQL-Compatible Edition 데이터베이스의 Postgrepglogical의 경우 동일한 파라미터 그룹에서 RDS 파라미터를 shared_preload_libraries로 설정합니다.

    2. PostgreSQL 소스 데이터베이스를 다시 시작합니다.

    3. PostgreSQL 데이터베이스에서 명령을 실행합니다. create extension pglogical;

  2. 다음 명령을 실행하여 pglogical이 성공적으로 설치되었는지 확인합니다.

    select * FROM pg_catalog.pg_extension

이제 PostgreSQL 소스 데이터베이스 엔드포인트에 대한 변경 데이터 캡처를 수행하는 AWS DMS 작업을 생성할 수 있습니다.

참고

PostgreSQL 소스 데이터베이스에서 pglogical을 활성화하지 않으면 는 기본적으로 test_decoding 플러그인을 AWS DMS 사용합니다. 논리적 디코딩에 pglogical이 활성화된 경우 기본적으로 pglogical을 AWS DMS 사용합니다. 하지만 test_decoding 플러그인을 대신 사용하도록 추가 연결 속성 PluginName을 설정할 수 있습니다.

기본 CDC 시작점을 사용하여 PostgreSQL 소스 CDC 로드 설정

PostgreSQL를 소스로 사용하여 기본 CDC 시작점을 활성화하려면 엔드포인트를 생성할 때 slotName 추가 연결 속성을 기존 논리적 복제 슬롯의 이름으로 설정합니다. 이 논리적 복제 슬롯에는 엔드포인트 생성 시점부터 지속적인 변경 사항이 포함되므로 이전 시점의 복제를 지원합니다.

PostgreSQL는 논리적 복제 슬롯에서 변경 사항을 AWS DMS 성공적으로 읽은 후에만 폐기되는 WAL 파일에 데이터베이스 변경 사항을 기록합니다. 논리적 복제 슬롯을 사용하면 기록된 변경 사항이 복제 엔진에서 사용되기 전에 삭제되지 않도록 보호할 수 있습니다.

그러나 변경 비율과 사용 비율에 따라 논리적 복제 슬롯에 변경 사항이 포함되어 디스크 사용량이 증가할 수 있습니다. 논리적 복제 슬롯을 사용할 때는 소스 PostgreSQL 인스턴스에서 공간 사용량 경보를 설정하는 것이 좋습니다. slotName 추가 연결 속성 설정에 대한 자세한 내용은 PostgreSQL를 DMS 소스로 사용할 때 엔드포인트 설정 및 추가 연결 속성(ECAs) 단원을 참조하십시오.

다음 절차에서는 이 접근 방식에 대해 자세히 설명합니다.

기본 CDC 시작점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드를 설정하려면
  1. 시작 지점으로 사용할 이전 복제 작업(상위 작업)에서 사용하는 논리적 복제 슬롯을 식별합니다. 그런 다음 원본 데이터베이스에서 pg_replication_slots 뷰를 쿼리하여 이 슬롯에 활성 연결이 없는지 확인합니다. 활성 연결이 있다면 계속하기 전에 연결을 확인하고 닫습니다.

    다음 단계에서는 논리적 복제 슬롯이 abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef라고 가정합니다.

  2. 다음 추가 연결 속성 설정을 포함하는 새 소스 엔드포인트를 만듭니다.

    slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
  3. 콘솔 AWS CLI 또는 를 사용하여 새 CDC전용 태스크를 생성합니다 AWS DMS API. 예를 들어 를 사용하면 다음 create-replication-task 명령을 실행할 CLI 수 있습니다.

    aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" --replication-task-settings "file://task-pg.json"

    위의 명령에서는 다음 옵션이 설정됩니다.

    • source-endpoint-arn 옵션은 2단계에서 만든 새 값으로 설정됩니다.

    • replication-instance-arn 옵션은 1단계의 상위 작업과 동일한 값으로 설정됩니다.

    • table-mappingsreplication-task-settings 옵션은 1단계의 상위 작업과 동일한 값으로 설정됩니다.

    • cdc-start-position 옵션은 시작 위치 값으로 설정됩니다. 이 시작 위치를 찾으려면 원본 데이터베이스의 pg_replication_slots 뷰를 쿼리하거나 1단계에서 상위 작업에 대한 콘솔 세부 정보를 확인합니다. 자세한 내용은 CDC 기본 시작점 결정 단원을 참조하십시오.

    AWS DMS 콘솔을 사용하여 새 CDC전용 태스크를 생성할 때 사용자 지정 CDC 시작 모드를 활성화하려면 다음을 수행합니다.

    • 작업 설정 섹션의 CDC 소스 트랜잭션에 대한 시작 모드에서 사용자 지정 CDC 시작 모드 활성화를 선택합니다.

    • 소스 트랜잭션의 사용자 지정 CDC 시작점 에서 로그 시퀀스 번호 지정을 선택합니다. 시스템 변경 번호를 지정하거나 복구 체크포인트 지정을 선택하고 복구 체크포인트를 제공합니다.

    이 CDC 작업이 실행되면 지정된 논리적 복제 슬롯이 없는 경우 에서 오류를 AWS DMS 발생시킵니다. 또한 작업이 cdc-start-position에 올바른 설정으로 생성되지 않은 경우에도 오류가 발생합니다.

pglogical 플러그인에서 기본 CDC 시작점을 사용하고 새 복제 슬롯을 사용하려는 경우 CDC 작업을 생성하기 전에 다음 설정 단계를 완료합니다.

이전에 다른 DMS 작업의 일부로 생성되지 않은 새 복제 슬롯을 사용하려면
  1. 다음과 같이 복제 슬롯을 생성합니다.

    SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
  2. 데이터베이스에서 복제 슬롯이 생성된 후 해당 슬롯의 restart_lsnconfirmed_flush_lsn 값을 가져와 적어 둡니다.

    select * from pg_replication_slots where slot_name like 'replication_slot_name';

    복제 슬롯 이후에 생성된 CDC 태스크의 기본 CDC 시작 위치는 confirmed_flush_lsn 값보다 이전일 수 없습니다.

    restart_lsnconfirmed_flush_lsn 값에 대한 자세한 내용은 pg_replication_slots를 참조하세요.

  3. pglogical 노드를 생성합니다.

    SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
  4. pglogical.create_replication_set 함수를 사용하여 두 개의 복제 세트를 생성합니다. 첫 번째 복제 세트는 프라이머리 키가 있는 테이블의 업데이트 및 삭제를 추적합니다. 두 번째 복제 세트는 삽입만 추적하며, 첫 번째 복제 세트와 같은 이름에 접두사 'i'가 추가됩니다.

    SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false); SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
  5. 복제본 세트에 테이블을 추가합니다.

    SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true); SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
  6. 소스 엔드포인트를 생성할 때 다음 추가 연결 속성(ECA)을 설정합니다.

    PluginName=PGLOGICAL;slotName=slot_name;

이제 새 복제 슬롯을 사용하여 PostgreSQL 네이티브 시작점이 있는 CDC 태스크만 생성할 수 있습니다. pglogical 플러그인에 대한 자세한 내용은 pglogical 3.7 설명서를 참조하세요.

를 사용하여 PostgreSQL에서 PostgreSQL로 마이그레이션 AWS DMS

PostgreSQL 이외의 데이터베이스 엔진에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우 AWS DMS 는 거의 항상 사용할 수 있는 최상의 마이그레이션 도구입니다. 그러나 PostgreSQL 데이터베이스에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우 PostgreSQL 도구가 더 효과적일 수 있습니다.

PostgreSQL 기본 도구를 사용하여 데이터 마이그레이션

다음과 같은 조건에서pg_dump는 PostgreSQL 데이터베이스 마이그레이션 도구를 사용하는 것이 좋습니다.

  • 소스 PostgreSQL 데이터베이스에서 대상 PostgreSQL 데이터베이스로 마이그레이션하는 동종 마이그레이션이 있습니다.

  • 전체 데이터베이스를 마이그레이션합니다.

  • 기본 도구를 사용하여 최소한의 가동 중지로 데이터를 마이그레이션할 수 있습니다.

pg_dump 유틸리티는 COPY 명령을 사용하여 PostgreSQL 데이터베이스의 스키마 및 데이터 덤프를 생성합니다. pg-dump에 의해 생성되는 덤프 스크립트는 같은 이름을 가진 데이터베이스로 데이터를 로드하고 테이블, 인덱스, 외래 키를 다시 만듭니다. 데이터를 다른 이름의 데이터베이스로 복구하려면 pg_restore 명령과 -d 파라미터를 사용하세요.

에서 실행되는 PostgreSQL 소스 데이터베이스에서 Amazon RDS for PostgreSQL 대상으로 데이터를 마이그레이션EC2하는 경우 pglogical 플러그인을 사용할 수 있습니다.

PostgreSQL 데이터베이스를 Amazon RDS for PostgreSQL 또는 Amazon Aurora Postgre SQL-Compatible Edition으로 가져오는 방법에 대한 자세한 내용은 섹션을 참조하세요https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html.

DMS 를 사용하여 PostgreSQL에서 Postgre로 데이터 마이그레이션SQL

AWS DMS 는 예를 들어 온프레미스에 있는 소스 PostgreSQL 데이터베이스에서 대상 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 인스턴스로 데이터를 마이그레이션할 수 있습니다. 코어 또는 기본 PostgreSQL 데이터 유형은 대부분 성공적으로 마이그레이션됩니다.

참고

분할된 테이블을 PostgreSQL 소스에서 PostgreSQL 대상으로 복제할 때 DMS 태스크의 선택 기준의 일부로 상위 테이블을 언급할 필요가 없습니다. 상위 테이블을 언급하면 대상의 하위 테이블에서 데이터가 중복되어 PK 위반이 발생할 수 있습니다. 테이블 매핑 선택 기준에서 하위 테이블만 선택하면 상위 테이블이 자동으로 채워집니다.

소스 데이터베이스에서 지원되지만 대상에서 지원되지 않는 데이터 유형은 성공적으로 마이그레이션되지 않을 수 있습니다. 는 데이터 유형을 알 수 없는 경우 일부 데이터 유형을 문자열로 AWS DMS 스트리밍합니다. XML 및 와 같은 일부 데이터 유형은 작은 파일로 성공적으로 마이그레이션JSON할 수 있지만 큰 문서인 경우 실패할 수 있습니다.

데이터 형식 마이그레이션을 수행할 때는 다음 사항에 유의하세요.

  • 경우에 따라 PostgreSQLNUMERIC(p,s) 데이터 형식은 정밀도와 규모를 지정하지 않습니다. DMS 버전 3.4.2 이하의 경우 는 기본적으로 정밀도 28과 스케일 6NUMERIC(28,6)을 DMS 사용합니다. 예를 들어 소스의 값 0.611111104488373은 PostgreSQL 대상에서 0.611111로 변환됩니다.

  • ARRAY 데이터 형식의 테이블에는 기본 키가 있어야 합니다. 기본 키가 누락된 ARRAY 데이터 형식의 테이블은 전체 로드 중에 일시 중지됩니다.

다음 표에는 소스 PostgreSQL 데이터 유형과 마이그레이션이 성공적으로 가능한지 여부가 나와 있습니다.

데이터 유형 마이그레이션 성공 부분적으로 마이그레이션 마이그레이션하지 않음 설명
INTEGER X
SMALLINT X
BIGINT X
NUMERIC/DECIMAL(p,s) X 여기서, 0<p<39 및 0<s
NUMERIC/DECIMAL X 여기서, p>38 또는 p=s=0
REAL X
DOUBLE X
SMALLSERIAL X
SERIAL X
BIGSERIAL X
MONEY X
CHAR X 지정한 정밀도 없이
CHAR(n) X
VARCHAR X 지정한 정밀도 없이
VARCHAR(n) X
TEXT X
BYTEA X
TIMESTAMP X 양과 음의 무한대 값은 각각 '9999-12-31 23:59:59'와 '4713-01-01 00:00:00 BC'로 잘립니다.
TIMESTAMP WITH TIME ZONE X
DATE X
TIME X
TIME WITH TIME ZONE X
INTERVAL X
BOOLEAN X
ENUM X
CIDR X
INET X
MACADDR X
TSVECTOR X
TSQUERY X
XML X
POINT X 공간 후GIS 데이터 유형
LINE X
LSEG X
BOX X
PATH X
POLYGON X 공간 후GIS 데이터 유형
CIRCLE X
JSON X
ARRAY X 프라이머리 키 필요
COMPOSITE X
RANGE X
LINESTRING X 공간 후GIS 데이터 유형
MULTIPOINT X 공간 후GIS 데이터 유형
MULTILINESTRING X 공간 후GIS 데이터 유형
MULTIPOLYGON X 공간 후GIS 데이터 유형
GEOMETRYCOLLECTION X 공간 후GIS 데이터 유형

공간 후GIS 데이터 유형 마이그레이션

공간 데이터는 공간에서 객체 또는 위치의 지오메트리 정보를 식별합니다. PostgreSQL 객체 관계형 데이터베이스는 PostGIS 공간 데이터 유형을 지원합니다.

PostgreSQL 공간 데이터 객체를 마이그레이션하기 전에 PostGIS 플러그인이 전역 수준에서 활성화되어 있는지 확인합니다. 이렇게 하면 가 PostgreSQL 대상 DB 인스턴스에 대한 정확한 소스 공간 데이터 열을 AWS DMS 생성합니다.

PostgreSQL에서 PostgreSQL로의 동종 마이그레이션의 경우 는 다음과 같은 PostGIS geometric and 지리적(지리적 좌표) 데이터 객체 유형 및 하위 유형의 마이그레이션을 AWS DMS 지원합니다.

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

를 사용하여 Babelfish에서 Amazon Aurora PostgreSQL로 마이그레이션 AWS DMS

를 사용하여 Babelfish for Aurora PostgreSQL 소스 테이블을 지원되는 대상 엔드포인트로 마이그레이션할 수 있습니다 AWS DMS.

DMS 콘솔, API또는 CLI 명령을 사용하여 AWS DMS 소스 엔드포인트를 생성할 때 소스를 Amazon Aurora Postgre SQL로 설정하고 데이터베이스 이름을 로 설정합니다babelfish_db. 엔드포인트 설정 섹션에서 이 Babelfish DatabaseMode 설정되고 소스 Babelfish T-SQL 데이터베이스의 이름으로 설정BabelfishDatabaseName되었는지 확인합니다. Babelfish TCP 포트 를 사용하는 대신 Aurora PostgreSQL TCP 포트 를 1433사용합니다5432.

가 올바른 데이터 유형과 테이블 메타데이터를 DMS 사용하는지 확인하려면 데이터를 마이그레이션하기 전에 테이블을 생성해야 합니다. 마이그레이션을 실행하기 전에 대상에 대한 테이블을 생성하지 않으면 는 잘못된 데이터 유형 및 권한을 가진 테이블을 생성할 DMS 수 있습니다.

마이그레이션 작업에 변환 규칙 추가

Babelfish 소스에 대한 마이그레이션 작업을 생성할 때 가 미리 생성된 대상 테이블을 DMS 사용하도록 보장하는 변환 규칙을 포함해야 합니다.

Babelfish for PostgreSQL 클러스터를 정의할 때 다중 데이터베이스 마이그레이션 모드를 설정한 경우 스키마 이름을 T 스키SQL마로 바꾸는 변환 규칙을 추가합니다. 예를 들어 TSQL 스키마 이름이 이고 dboBabelfish for PostgreSQL 스키마 이름이 인 경우 변환 규칙을 dbo 사용하여 스키마의 이름을 로 mydb_dbo변경합니다. PostgreSQL 스키마 이름을 찾으려면 Amazon Aurora 사용 설명서Babelfish 아키텍처를 참조하세요.

단일 데이터베이스 모드를 사용하는 경우 변환 규칙을 사용하여 데이터베이스 스키마의 이름을 바꿀 필요가 없습니다. PostgreSQL 스키마 이름에는 one-to-one T-SQL 데이터베이스의 스키마 이름에 대한 매핑이 있습니다.

다음 변환 규칙 예제에서는 스키마 이름을 mydb_dbo 다시 에서 로 바꾸는 방법을 보여줍니다dbo.

{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "mydb_dbo" }, "rule-action": "rename", "value": "dbo", "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "mydb_dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }

Babelfish 테이블에서 PostgreSQL 소스 엔드포인트를 사용하는 데 대한 제한 사항

Babelfish 테이블과 함께 PostgreSQL 소스 엔드포인트를 사용하는 경우 다음 제한이 적용됩니다.

  • DMS 는 Babelfish 버전 16.2/15.6 이상 및 DMS 버전 3.5.3 이상에서만 마이그레이션을 지원합니다.

  • DMS 는 대상 엔드포인트에 Babelfish 테이블 정의 변경 사항을 복제하지 않습니다. 이 제한의 해결 방법은 먼저 대상에 테이블 정의 변경 사항을 적용한 다음 Babelfish 소스에서 테이블 정의를 변경하는 것입니다.

  • BYTEA 데이터 유형으로 Babelfish 테이블을 생성할 때 는 SQL 서버로 대상으로 마이그레이션할 때 이를 varbinary(max) 데이터 유형으로 DMS 변환합니다.

  • DMS 는 바이너리 데이터 유형에 대한 전체 LOB 모드를 지원하지 않습니다. 대신 이진 데이터 유형에 제한된 LOB 모드를 사용합니다.

  • DMS 는 소스로 Babelfish에 대한 데이터 검증을 지원하지 않습니다.

  • 대상 테이블 준비 모드 작업 설정의 경우 아무것도 하지 않음 또는 잘라내기 모드만 사용합니다. 대상에서 테이블 삭제 모드를 사용하지 마세요. 대상 에서 삭제 테이블을 사용하는 경우 는 잘못된 데이터 유형을 사용하여 테이블을 생성할 DMS 수 있습니다.

  • 지속적인 복제(CDC 또는 전체 로드 및 CDC)를 사용하는 경우 PluginName 추가 연결 속성(ECA)을 로 설정합니다TEST_DECODING.

  • DMS 는 Babelfish를 소스로 분할된 테이블의 복제(CDC 또는 전체 로드 및 CDC)를 지원하지 않습니다.

PostgreSQL 소스 데이터베이스에서 AWS DMS 아티팩트 제거

DDL 이벤트를 캡처하려면 마이그레이션 작업이 시작될 때 PostgreSQL 데이터베이스에서 다양한 아티팩트를 AWS DMS 생성합니다. 작업이 완료되면 이 아티팩트를 제거해야 할 수도 있습니다.

아티팩트를 제거하려면 다음 문을 (표시되는 순서대로) 발행합니다. 여기서 {AmazonRDSMigration}은 아티팩트가 생성되는 스키마입니다. 스키마 삭제를 수행할 때는 매우 주의해야 합니다. 절대로 연산 스키마(특히 퍼블릭 스키마)를 삭제해서는 안 됩니다.

drop event trigger awsdms_intercept_ddl;

이벤트 트리거는 특정 스키마에 속하지 않습니다.

drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}

PostgreSQL 데이터베이스를 DMS 소스로 사용할 때 추가 구성 설정

PostgreSQL 데이터베이스에서 데이터를 마이그레이션할 때 다음 두 가지 방법으로 구성 설정을 추가할 수 있습니다.

  • 추가 연결 속성에 값을 추가하여 DDL 이벤트를 캡처하고 운영 DDL 데이터베이스 아티팩트가 생성되는 스키마를 지정할 수 있습니다. 자세한 내용은 PostgreSQL를 DMS 소스로 사용할 때 엔드포인트 설정 및 추가 연결 속성(ECAs) 단원을 참조하십시오.

  • 연결 문자열 파라미터를 재정의할 수 있습니다. 다음 중 하나를 수행하려면 이 옵션을 선택합니다.

    • 내부 AWS DMS 파라미터를 지정합니다. 이러한 파라미터는 거의 필요하지 않으므로 사용자 인터페이스에 표시되지 않습니다.

    • 특정 데이터베이스 클라이언트에 대한 패스스루(패스스루) 값을 지정합니다. 데이터베이스 클라이언트에 전달되는 연결 스팅의 패스스루 파라미터를 AWS DMS 포함합니다.

  • PostgreSQL 버전 9.4 이상REPLICA IDENTITY에서 테이블 수준 파라미터를 사용하여 미리 쓰기 로그()에 기록된 정보를 제어할 수 있습니다WALs. 특히 는 업데이트되거나 삭제된 행WALs을 식별하기 위해 이렇게 합니다. 는 행에 있는 모든 열의 이전 값을 REPLICA IDENTITY FULL 기록합니다. 는 필요하지 않을 수 WALs 있는 추가 수를 FULL 생성하므로 각 테이블에 대해 REPLICA IDENTITY FULL 신중하게 사용합니다. 자세한 내용은 ALTER TABLE- 섹션을 참조하세요.REPLICA IDENTITY

MapBooleanAsBoolean PostgreSQL 엔드포인트 설정 사용

PostgreSQL 엔드포인트 설정을 사용하여 PostgreSQL 소스에서 Amazon Redshift 대상에 부울로 부울을 매핑할 수 있습니다. 기본적으로 BOOLEAN 유형은 varchar(5)로 마이그레이션됩니다. 다음 예제와 같이 PostgreSQL가 부울 유형을 부울로 마이그레이션MapBooleanAsBoolean하도록 를 지정할 수 있습니다.

--postgre-sql-settings '{"MapBooleanAsBoolean": true}'

단, 이 설정이 적용되려면 소스 엔드포인트와 대상 엔드포인트 모두에서 이 설정을 지정해야 합니다.

내SQL 에는 BOOLEAN 유형이 없으므로 BOOLEAN 데이터를 내 로 마이그레이션할 때 이 설정 대신 변환 규칙을 사용합니다SQL.

PostgreSQL를 DMS 소스로 사용할 때 엔드포인트 설정 및 추가 연결 속성(ECAs)

엔드포인트 설정 및 추가 연결 속성(ECAs)을 사용하여 PostgreSQL 소스 데이터베이스를 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나 --postgre-sql-settings '{"EndpointSetting": "value", ...}' JSON 구문과 AWS CLI함께 의 create-endpoint 명령을 사용하여 소스 엔드포인트를 생성할 때 엔드포인트 설정을 지정합니다.

다음 표에는 PostgreSQL를 소스로 사용할 수 ECAs 있는 엔드포인트 설정과 가 나와 있습니다.

속성 이름 설명

CaptureDdls

DDL 이벤트를 캡처하려면 작업이 시작될 때 PostgreSQL 데이터베이스에서 다양한 아티팩트를 AWS DMS 생성합니다. PostgreSQL 소스 데이터베이스에서 AWS DMS 아티팩트 제거의 설명에 따라 이 아티팩트를 제거할 수 있습니다.

이 값을 false로 설정하면 소스 데이터베이스에 테이블이나 트리거를 생성할 필요가 없습니다.

스트리밍된 DDL 이벤트가 캡처됩니다.

기본 값: true

유효값: true/false

예시: --postgre-sql-settings '{"CaptureDdls": true}'

ConsumeMonotonicEvents

중복된 로그 시퀀스 번호(LSNs)가 있는 모놀리식 트랜잭션이 복제되는 방식을 제어하는 데 사용됩니다. 이 파라미터가 이면 중복된 false이벤트가 대상에 사용되고 복제LSNs됩니다. 이 파라미터가 이면 첫 번째 이벤트true만 복제되고 중복된 이벤트LSNs는 대상에서 소비되거나 복제되지 않습니다.

기본 값: false

유효한 값: false/true

예시: --postgre-sql-settings '{"ConsumeMonotonicEvents": true}'

DdlArtifactsSchema

운영 DDL 데이터베이스 아티팩트가 생성되는 스키마를 설정합니다.

기본값: 퍼블릭

유효값: 문자열

예시: --postgre-sql-settings '{"DdlArtifactsSchema": "xyzddlschema"}'

ExecuteTimeout

PostgreSQL 인스턴스의 클라이언트 문 제한 시간을 초 단위로 설정합니다. 기본값은 60초입니다.

예시: --postgre-sql-settings '{"ExecuteTimeout": 100}'

FailTasksOnLobTruncation

로 설정하면 LOB 열의 실제 크기가 지정된 보다 크면 true이 값은 태스크가 실패합니다LobMaxSize.

작업이 제한 LOB 모드로 설정되고 이 옵션이 true로 설정된 경우 LOB 데이터를 잘라내는 대신 작업이 실패합니다.

기본값: false

유효 값: 불

예시: --postgre-sql-settings '{"FailTasksOnLobTruncation": true}'

fetchCacheSize

이 추가 연결 속성(ECA)은 전체 로드 작업 중에 커서가 가져올 행 수를 설정합니다. 복제 인스턴스에서 사용할 수 있는 리소스에 따라 값을 높이거나 낮출 수 있습니다.

기본 값: 10000

유효한 값: 숫자

ECA 예: fetchCacheSize=10000;

HeartbeatEnable

WAL 하트비트 기능은 더미 트랜잭션을 모방하므로 유휴 논리적 복제 슬롯이 이전 WAL 로그에 고정되지 않아 소스에 스토리지 전체 상황이 발생합니다. 이 하트비트는 restart_lsn 이동 재시작을 유지하고 스토리지 전체 시나리오를 방지합니다.

기본 값: false

유효값: true/false

예시: --postgre-sql-settings '{"HeartbeatEnable": true}'

HeartbeatFrequency

WAL 하트비트 빈도(분)를 설정합니다.

기본 값: 5

유효한 값: 숫자

예시: --postgre-sql-settings '{"HeartbeatFrequency": 1}'

HeartbeatSchema

하트비트 아티팩트가 생성되는 스키마를 설정합니다.

기본 값: public

유효값: 문자열

예시: --postgre-sql-settings '{"HeartbeatSchema": "xyzheartbeatschema"}'

MapJsonbAsClob

기본적으로 는 JSONB를 AWS DMS 매핑합니다NCLOB. PostgreSQL가 JSONB 유형을 로 마이그레이션MapJsonbAsClob하도록 를 지정할 수 있습니다CLOB.

예시: --postgre-sql-settings='{"MapJsonbAsClob": "true"}'

MapLongVarcharAs

기본적으로 는 VARCHAR를 AWS DMS 매핑합니다WSTRING. PostgreSQL가 VARCHAR(N) 유형(여기서 N은 16387보다 큼)을 다음 유형으로 마이그레이션MapLongVarcharAs하도록 를 지정할 수 있습니다.

  • WSTRING

  • CLOB

  • NCLOB

예시: --postgre-sql-settings='{"MapLongVarcharAs": "CLOB"}'

MapUnboundedNumericAsString

이 파라미터는 숫자 값의 정밀도를 잃지 않고 성공적으로 마이그레이션하기 STRING 위해 비결합 NUMERIC 데이터 유형이 있는 열을 로 처리합니다. 이 파라미터는 PostgreSQL 소스에서 PostgreSQL 대상 또는 PostgreSQL 호환성이 있는 데이터베이스로 복제하는 경우에만 사용합니다.

기본 값: false

유효값: false/true

예시: --postgre-sql-settings '{"MapUnboundedNumericAsString": true}'

이 파라미터를 사용하면 숫자에서 문자열로, 다시 숫자로 변환되므로 복제 성능이 일부 저하될 수 있습니다. 이 파라미터는 DMS 버전 3.4.4 이상에서 사용할 수 있습니다.

참고

MapUnboundedNumericAsString PostgreSQL 소스 및 대상 엔드포인트에서만 함께 사용합니다.

소스 PostgreSQL 엔드포인트MapUnboundedNumericAsString에서 를 사용하면 에서 정밀도가 28로 제한됩니다CDC. 대상 엔드포인트에서 MapUnboundedNumericAsString을 사용하면 정밀도 28, 스케일 6으로 데이터를 마이그레이션할 수 있습니다.

PostgreSQL가 아닌 대상MapUnboundedNumericAsString과 함께 사용하지 마세요.

PluginName

복제 슬롯을 생성하는 데 사용할 플러그인을 지정합니다.

유효값: pglogical, test_decoding

예시: --postgre-sql-settings '{"PluginName": "test_decoding"}'

SlotName

PostgreSQL 소스 인스턴스의 CDC 로드에 대해 이전에 생성된 논리적 복제 슬롯의 이름을 설정합니다.

CdcStartPosition 요청 파라미터와 함께 사용할 때 이 속성은 AWS DMS API 기본 CDC 시작점을 사용할 수도 있습니다. DMS 는 CDC 로드 작업을 시작하기 전에 지정된 논리적 복제 슬롯이 존재하는지 확인합니다. 또한 작업이 CdcStartPosition에 대한 유효한 설정으로 생성되었는지 확인합니다. 지정된 슬롯이 없거나 태스크에 유효한 CdcStartPosition 설정이 없는 경우 에서 오류가 DMS 발생합니다.

CdcStartPosition 요청 파라미터 설정에 대한 자세한 내용은 CDC 기본 시작점 결정 단원을 참조하십시오. 사용에 대한 자세한 내용은 AWS Database Migration Service API 참조CreateReplicationTask, StartReplicationTaskModifyReplicationTask API 작업에 대한 설명서를 CdcStartPosition참조하세요.

유효값: 문자열

예시: --postgre-sql-settings '{"SlotName": "abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef"}'

unboundedVarcharMaxSize

이 추가 연결 속성(ECA)은 최대 길이 지정자가 VarChar 없는 유형으로 정의된 데이터 열의 최대 크기를 정의합니다. 기본값은 8,000바이트입니다. 최대값은 10485760바이트입니다.

PostgreSQL 데이터베이스를 DMS 소스로 사용하는 것에 대한 제한 사항

PostgreSQL를 의 소스로 사용하는 경우 다음 제한이 적용됩니다 AWS DMS.

  • AWS DMS 는 Amazon RDS for PostgreSQL 10.4 또는 Amazon Aurora PostgreSQL 10.4에서 소스 또는 대상으로 작동하지 않습니다.

  • 캡처된 테이블에는 프라이머리 키가 있어야 합니다. 테이블에 기본 키가 없는 경우 는 해당 테이블에 대한 작업을 AWS DMS 무시DELETE하고 UPDATE 기록합니다. 해결 방법은 논리적 복제를 사용하여 변경 데이터 캡처 활성화(CDC)를 참조하세요.

    참고: 기본 키/고유 인덱스 없이 마이그레이션하는 것은 권장되지 않습니다. 그렇지 않으면 'NO' 배치 적용 기능, 전체 LOB 기능, 데이터 검증 및 Redshift 대상에 효율적으로 복제할 수 없음과 같은 추가 제한 사항이 적용됩니다.

  • AWS DMS 는 기본 키 세그먼트를 업데이트하려는 시도를 무시합니다. 이 경우, 대상에서 아무 행도 업데이트하지 않는 것으로 업데이트를 식별합니다. 그러나 PostgreSQL에서 기본 키를 업데이트한 결과는 예측할 수 없으므로 예외 테이블에는 레코드가 기록되지 않습니다.

  • AWS DMS 는 타임스탬프에서 프로세스 변경 시작 실행 옵션을 지원하지 않습니다.

  • AWS DMS 는 파티션 또는 하위 파티션 작업(ADD, DROP또는 )으로 인한 변경 사항을 복제하지 않습니다TRUNCATE.

  • 각 이름의 대/소문자가 다른 동일한 이름(예: table1, TABLE1, Table1)의 여러 테이블을 복제하면 예측할 수 없는 동작이 발생할 수 있습니다. 이 문제로 인해 AWS DMS 는 이러한 유형의 복제를 지원하지 않습니다.

  • 대부분의 경우, 는 테이블의 CREATE, ALTER및 DROP DDL 문 변경 처리를 AWS DMS 지원합니다. 는 테이블이 내부 함수 또는 프로시저 본문 블록 또는 다른 중첩된 구성에서 유지되는 경우 이 변경 처리를 지원하지 AWS DMS 않습니다.

    예를 들어 다음 변경은 캡처되지 않습니다.

    CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void LANGUAGE plpgsql AS $$ BEGIN create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT NULL); END; $$;
  • 현재 PostgreSQL 소스의 boolean 데이터 유형은 값이 일치하지 않는 bit 데이터 유형으로 SQL 서버 대상으로 마이그레이션됩니다. 해결 방법으로 열에 대한 VARCHAR(1) 데이터 유형을 사용하여 테이블을 미리 생성(또는 테이블 생성) AWS DMS합니다. 그런 다음, 다운스트림 처리에서 ‘F’를 False로 처리하고 ‘T’를 True로 처리합니다.

  • AWS DMS 는 TRUNCATE 작업의 변경 처리를 지원하지 않습니다.

  • OID LOB 데이터 유형은 대상으로 마이그레이션되지 않습니다.

  • AWS DMS 는 동종 마이그레이션에 대해서만 사후GIS 데이터 유형을 지원합니다.

  • 소스가 온프레미스 또는 Amazon EC2 인스턴스에 있는 PostgreSQL 데이터베이스인 경우 test_decoding 출력 플러그인이 소스 엔드포인트에 설치되어 있는지 확인합니다. 이 플러그인은 PostgreSQL contrib 패키지에서 찾을 수 있습니다. 테스트 디코딩 플러그인에 대한 자세한 내용은 PostgreSQL 설명서 를 참조하세요.

  • AWS DMS 는 열 기본값을 설정 및 설정 해제하는 변경 처리를 지원하지 않습니다(ALTERTABLE문의 ALTER COLUMN SET DEFAULT 절 사용).

  • AWS DMS 는 열 무효화를 설정하기 위한 변경 처리를 지원하지 않습니다(ALTERTABLE문장에 ALTER COLUMN [SET|DROP] NOT NULL 절 사용).

  • 논리적 복제가 활성화된 경우, 트랜잭션당 메모리에 보관되는 최대 변경 사항 수는 4MB입니다. 그 후에는 변경 사항이 디스크로 유출됩니다. 따라서 트랜잭션이 완료 또는 중지되고 롤백이 완료될 때까지 ReplicationSlotDiskUsage가 증가하며 restart_lsn이 진행되지 않습니다. 트랜잭션이 길기 때문에 롤백하는 데 시간이 오래 걸릴 수 있습니다. 따라서 논리적 복제가 활성화된 경우 오래 실행되는 트랜잭션이나 많은 하위 트랜잭션을 피하세요. 대신 트랜잭션을 여러 개의 작은 트랜잭션으로 나누세요.

    Aurora PostgreSQL 버전 13 이상에서는 DMS 유출로 인해 데이터가 디스크로 변경될 때 제어할 logical_decoding_work_mem 파라미터를 조정할 수 있습니다. 자세한 내용은 Aurora Postgre에서 파일 재생하기 SQL 단원을 참조하십시오.

  • ARRAY 데이터 형식의 테이블에는 기본 키가 있어야 합니다. 기본 키가 누락된 ARRAY 데이터 형식의 테이블은 전체 로드 중에 일시 중지됩니다.

  • AWS DMS 는 파티션된 테이블의 복제를 지원하지 않습니다. 분할된 테이블이 감지되면, 다음 작업이 진행됩니다.

    • 엔드포인트는 상위 및 하위 테이블 목록을 보고합니다.

    • AWS DMS 는 대상의 테이블을 선택한 테이블과 속성이 동일한 일반 테이블로 생성합니다.

    • 원본 데이터베이스의 상위 테이블에 하위 테이블과 동일한 프라이머리 키 값이 있으면, "중복 키" 오류가 발생합니다.

  • PostgreSQL 소스에서 PostgreSQL 대상으로 분할된 테이블을 복제하려면 먼저 대상에 상위 테이블과 하위 테이블을 수동으로 생성합니다. 그런 다음 이 테이블에 복제할 별도의 작업을 정의합니다. 이 경우에 작업 구성을 로딩 전 자르기로 설정합니다.

  • PostgreSQL NUMERIC 데이터 형식은 크기가 고정되지 않습니다. NUMERIC 데이터 형식이지만 정밀도 및 스케일이 없는 데이터를 전송할 때 는 기본적으로 NUMERIC(28,6) (정밀도 28 및 스케일 6)을 DMS 사용합니다. 예를 들어 소스의 값 0.611111104488373은 PostgreSQL 대상에서 0.611111로 변환됩니다.

  • AWS DMS 는 Aurora PostgreSQL Serverless V1을 전체 로드 작업의 소스로만 지원합니다. 는 Aurora PostgreSQL Serverless V2를 전체 로드, 전체 로드 및 CDC, CDC전용 작업의 소스로 AWS DMS 지원합니다.

  • AWS DMS 는 코어레서 함수로 생성된 고유 인덱스가 있는 테이블의 복제를 지원하지 않습니다.

  • LOB 모드를 사용할 때 소스 테이블과 해당 대상 테이블 모두 기본 키가 동일해야 합니다. 테이블 중 하나에 기본 키가 없는 경우 DELETE 및 UPDATE 레코드 작업의 결과는 예측할 수 없습니다.

  • 병렬 로드 기능을 사용하는 경우, 파티션 또는 하위 파티션에 따른 테이블 분할은 지원되지 않습니다. 병렬 로드에 관한 자세한 내용은 선택한 테이블, 뷰 및 컬렉션에 병렬 로드 사용 섹션을 참조하세요.

  • AWS DMS 는 지연된 제약 조건을 지원하지 않습니다.

  • AWS DMS 버전 3.4.7은 PostgreSQL 14.x를 다음과 같은 제한이 있는 소스로 지원합니다.

    • AWS DMS 는 2단계 커밋의 변경 처리를 지원하지 않습니다.

    • AWS DMS 는 진행 중인 긴 트랜잭션을 스트리밍하기 위한 논리적 복제를 지원하지 않습니다.

  • AWS DMS 는 Amazon RDS Proxy for PostgreCDCSQL를 소스로 지원하지 않습니다.

  • 프라이머리 키 열을 포함하지 않는 소스 필터를 사용하면 DELETE 작업이 캡처되지 않습니다.

  • 소스 데이터베이스도 다른 타사 복제 시스템의 대상인 경우 DDL 변경 사항이 동안 마이그레이션되지 않을 수 있습니다CDC. 이러한 상황으로 인해 awsdms_intercept_ddl 이벤트 트리거가 실행되지 않을 수 있기 때문입니다. 이 상황을 해결하려면 소스 데이터베이스에서 해당 트리거를 다음과 같이 수정하세요.

    alter event trigger awsdms_intercept_ddl enable always;
  • AWS DMS 는 PostgreSQL용 CDC Amazon RDS 다중 AZ 데이터베이스 클러스터를 소스로 지원하지 않습니다. RDS PostgreSQL용 다중 AZ 데이터베이스 클러스터는 논리적 복제를 지원하지 않기 때문입니다.

Postgre의 소스 데이터 유형SQL

다음 표에는 를 사용할 때 지원되는 PostgreSQL 소스 데이터 유형 AWS DMS 과 AWS DMS 데이터 유형에 대한 기본 매핑이 나와 있습니다.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하십시오.

AWS DMS 데이터 유형에 대한 자세한 내용은 섹션을 참조하세요AWS Database Migration Service에서 사용되는 데이터 형식.

PostgreSQL 데이터 유형

DMS 데이터 유형

INTEGER

INT4

SMALLINT

INT2

BIGINT

INT8

NUMERIC (p,s)

정밀도가 0~38인 경우 를 사용합니다NUMERIC.

정밀도가 39 이상인 경우 를 사용합니다STRING.

DECIMAL(P,S)

정밀도가 0~38인 경우 를 사용합니다NUMERIC.

정밀도가 39 이상인 경우 를 사용합니다STRING.

REAL

REAL4

DOUBLE

REAL8

SMALLSERIAL

INT2

SERIAL

INT4

BIGSERIAL

INT8

MONEY

NUMERIC(38,4)

MONEY 데이터 유형은 SQL 서버의 FLOAT 에 매핑됩니다.

CHAR

WSTRING (1)

CHAR(N)

WSTRING (n)

VARCHAR(N)

WSTRING (n)

TEXT

NCLOB

CITEXT

NCLOB

BYTEA

BLOB

TIMESTAMP

DATETIME

TIMESTAMP WITH TIME ZONE

DATETIME

DATE

DATE

TIME

TIME

TIME WITH TIME ZONE

TIME

INTERVAL

STRING (128) - 1YEAR, 2MONTHS, 3DAYS, 4HOURS, 5MINUTES, 6 SECONDS

BOOLEAN

CHAR (5) 거짓 또는 참

ENUM

STRING (64)

CIDR

STRING (50)

INET

STRING (50)

MACADDR

STRING (18)

BIT (n)

STRING (n)

BIT VARYING (n)

STRING (n)

UUID

STRING

TSVECTOR

CLOB

TSQUERY

CLOB

XML

CLOB

POINT

STRING (255) “(x,y)”

LINE

STRING (255) “(x,y,z)”

LSEG

STRING (255) “((x1,y1),(x2,y2))”

BOX

STRING (255) “((x1,y1),(x2,y2))”

PATH

CLOB “((x1,y1),(xn,yn)”)”

POLYGON

CLOB “((x1,y1),(xn,yn)”)”

CIRCLE

STRING (255) “(x,y),r”

JSON

NCLOB

JSONB

NCLOB

ARRAY

NCLOB

COMPOSITE

NCLOB

HSTORE

NCLOB

INT4RANGE

STRING (255)

INT8RANGE

STRING (255)

NUMRANGE

STRING (255)

STRRANGE

STRING (255)

Postgre의 LOB 소스 데이터 유형 작업SQL

PostgreSQL 열 크기는 PostgreSQL LOB 데이터 유형을 AWS DMS 데이터 유형으로 변환하는 데 영향을 줍니다. 이를 위해 다음 AWS DMS 데이터 형식의 경우, 다음 단계에 따르십시오.

  • BLOB – 작업 생성 시 제한 LOB 크기를 최대 LOB 크기(KB) 값으로 설정합니다.

  • CLOB – 복제는 각 문자를 UTF8 문자로 처리합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이를 찾습니다(여기에서는 max_num_chars_text로 표시). 이 길이를 사용하여 제한 LOB 크기 값을 로 지정합니다. 데이터에 4바이트 문자가 포함된 경우 2를 곱하여 바이트 단위인 값으로 제한 LOB 크기를 지정합니다. 이 경우 로 제한 LOB 크기는 에 2를 max_num_chars_text곱한 값과 같습니다.

  • NCLOB – 복제는 각 문자를 2바이트 문자로 처리합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이(max_num_chars_text)를 찾고 2를 곱합니다. 이렇게 하면 LOB 크기 제한 값을 로 지정할 수 있습니다. 이 경우 로 제한 LOB 크기는 에 2를 max_num_chars_text곱한 값과 같습니다. 데이터에 4바이트 문자가 포함된 경우에는 다시 2를 곱합니다. 이 경우 로 제한 LOB 크기는 에 4를 max_num_chars_text곱한 값과 같습니다.