PostgreSQL 데이터베이스를 AWS DMS 소스로 사용 - AWS Database Migration Service

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

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

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

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

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

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

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

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

  • Amazon Aurora PostgreSQL 호환 버전 기반 DB 인스턴스의 데이터베이스

  • Amazon Aurora PostgreSQL 호환 서버리스 버전 기반 DB 인스턴스의 데이터베이스

참고

DMS는 전체 로드에 한해 Amazon Aurora PostgreSQL Serverless V1을 소스로 지원합니다. 하지만 Amazon Aurora PostgreSQL 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 이상 버전을 사용합니다.

Secure Sockets Layer(SSL)을 사용하여 PostgreSQL 엔드포인트와 복제 인스턴스 간 연결을 암호화할 수 있습니다. PostgreSQL 엔드포인트에서 SSL을 사용하는 방법에 대한 자세한 내용은 AWS Database Migration Service에서 SSL 사용 섹션을 참조하십시오.

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

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

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

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

PostgreSQL 데이터베이스를 AWS DMS 소스로 사용하기 위한 사전 요구 사항

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

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

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

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

    # 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

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

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

참고

일부 AWS DMS 트랜잭션은 DMS 엔진에서 다시 사용하기 전까지 얼마 동안 유휴 상태입니다. PostgreSQL 버전 9.6 이상에서 idle_in_transaction_session_timeout 파라미터를 사용하면 유휴 트랜잭션이 시간 초과되어 실패하도록 할 수 있습니다. 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으로 설정하면 시간 제한 메커니즘이 비활성화되며, 이는 유효한 DMS 설정입니다.

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

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

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

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

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

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

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

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

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

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

참고

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

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

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

RDS for PostgreSQL 읽기 전용 복제본은 CDC(지속적 복제)에 사용할 수 없습니다.

PostgreSQL 버전

AWS DMS 전체 로드 지원

AWS DMS CDC 지원

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

아니요

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

PostgreSQL 10.21(또는 이상)과 호환되는 RDS for PostgreSQL

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

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

  2. DB 클러스터 파라미터 그룹의 rds.logical_replication 파라미터를 1로 설정합니다. 이 정적 파라미터를 적용하려면 DB 인스턴스를 재부팅해야 합니다. 이 파라미터를 적용하는 중에 AWS DMS에서는 wal_level, max_wal_senders, max_replication_slots, max_connections 파라미터를 설정합니다. 이러한 파라미터 변경은 WAL(Write Ahead Log) 생성을 강화하므로 논리적 복제 슬롯을 사용할 때 rds.logical_replication만 설정하면 됩니다.

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

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

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

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

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

참고

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

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

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

  2. 마스터 계정이 아닌 사용자 계정(여기서는 OtherThanMaster 계정)을 사용하여 PostgreSQL DB 인스턴스에 로그인합니다.

  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) 활성화

PostgreSQL의 네이티브 논리적 복제 기능을 사용하여 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 작업을 다시 시작(재개가 아님)하면 복제 슬롯이 다시 생성됩니다.

참고

DMS는 논리적 디코딩에 test_decoding 또는 pglogical 플러그인을 사용합니다. 소스 PostgreSQL 데이터베이스에서 pglogical 플러그인을 사용할 수 있는 경우, DMS는 pglogical을 사용하여 복제 슬롯을 생성하고, 그렇지 않으면 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 이상

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

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

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

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

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

      • Amazon RDS 기반 PostgreSQL과 Amazon Aurora PostgreSQL 호환 버전 데이터베이스의 경우, 동일한 RDS 파라미터 그룹에서 shared_preload_libraries 파라미터를 pglogical로 설정합니다.

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

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

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

    select * FROM pg_catalog.pg_extension

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

참고

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

네이티브 CDC 시작 지점을 사용하여 PostgreSQL 소스 엔드포인트의 CDC 로드 설정

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

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

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

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

고유 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 또는 AWS DMS API를 사용하여 새 CDC 전용 작업을 만듭니다. 예를 들어 CLI를 사용하여 다음 create-replication-task 명령을 실행할 수 있습니다.

    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 설명서를 참조하세요.

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

PostgreSQL이 아닌 데이터베이스 엔진에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우, 사용할 수 있는 최고의 마이그레이션 도구는 거의 언제나 AWS DMS입니다. 하지만 PostgreSQL 데이터베이스에서 PostgreSQL 데이터베이스로 마이그레이션하는 경우, PostgreSQL 도구가 더 효과적입니다.

PostgreSQL 네이티브 도구를 사용하여 데이터 마이그레이션

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

  • 같은 유형의 마이그레이션을 수행합니다. 이 경우 PostgreSQL 데이터베이스에서 대상 PostgreSQL 데이터베이스로 마이그레이션합니다.

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

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

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

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

PostgreSQL 데이터베이스를 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전으로 가져오기에 대한 자세한 내용은 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html 섹션을 참조하세요.

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

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

참고

파티션된 테이블을 PostgreSQL 소스에서 PostgreSQL 대상으로 복제할 때는 DMS 작업에서 선택 기준의 일부로 상위 테이블을 언급하지 않아도 됩니다. 상위 테이블을 언급하면 대상의 하위 테이블에서 데이터가 중복되어 PK 위반이 발생할 수 있습니다. 테이블 매핑 선택 기준에서 하위 테이블만 선택하면 상위 테이블이 자동으로 채워집니다.

원본 데이터베이스에서는 지원되지만 대상에서는 지원되지 않는 데이터 형식은 성공적으로 마이그레이션되지 않을 수 있습니다. AWS DMS는 데이터 형식이 알려지지 않은 일부 데이터를 문자열로 스트리밍합니다. XML 또는 JSON과 같은 어떤 데이터 유형은 작업 파일을 성공적으로 마이그레이션할 수 있지만 대형 문서의 경우 실패할 수 있습니다.

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

  • PostgreSQL NUMERIC(p,s) 데이터 형식이 정밀도와 스케일을 지정하지 않는 경우도 있습니다. DMS 버전 3.4.2 이하 버전에서 DMS는 기본적으로 정밀도 28과 스케일 6인 NUMERIC(28,6)을 사용합니다. 예를 들어 소스의 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(시간대 사용) X
날짜 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 PostGIS 공간 데이터 형식
LINE X
LSEG X
BOX X
PATH X
POLYGON X PostGIS 공간 데이터 형식
CIRCLE X
JSON X
ARRAY X 프라이머리 키 필요
COMPOSITE X
RANGE X
LINESTRING X PostGIS 공간 데이터 형식
MULTIPOINT X PostGIS 공간 데이터 형식
MULTILINESTRING X PostGIS 공간 데이터 형식
MULTIPOLYGON X PostGIS 공간 데이터 형식
GEOMETRYCOLLECTION X PostGIS 공간 데이터 형식

PostGIS 공간 데이터 형식 마이그레이션

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

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

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

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

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

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

아티팩트를 제거하려면 다음 문을 (표시되는 순서대로) 발행합니다. 여기서 {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 소스로 사용하는 경우의 엔드포인트 설정 및 추가 연결 속성 (ECA) 섹션을 참조하세요.

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

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

    • 특정 데이터베이스 클라이언트에서 통과(패스스루) 값을 지정합니다. AWS DMS는 데이터베이스 클라이언트에 전달되는 연결 문자열에 통과 파라미터를 포함합니다.

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

MapBooleanAsBoolean PostgreSQL 엔드포인트 설정 사용

PostgreSQL 엔드포인트 설정을 사용하여 PostgreSQL 소스의 불을 Amazon Redshift 대상에 매핑할 수 있습니다. 기본적으로 불 형식은 varchar(5)로 마이그레이션됩니다. 다음 예제에 나온 것처럼 PostgreSQL이 불 형식을 불로 마이그레이션하도록 MapBooleanAsBoolean을 지정할 수 있습니다.

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

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

MySQL에는 불 형식이 없으므로 불 데이터를 MySQL로 마이그레이션할 때는 이 설정 대신 변환 규칙을 사용하세요.

PostgreSQL을 DMS 소스로 사용하는 경우의 엔드포인트 설정 및 추가 연결 속성 (ECA)

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

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

속성 이름 설명

CaptureDDLs

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

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

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

기본 값: true

유효값: true/false

예제: --postgre-sql-settings '{"CaptureDDLs": true}'

ConsumeMonotonicEvents

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

기본 값: false

유효한 값: false/true

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

DdlArtifactsSchema

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

기본값: 퍼블릭

유효값: 문자열

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

ExecuteTimeout

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

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

FailTasksOnLobTruncation

이 값을 true로 설정하면 LOB 열의 실제 크기가 지정된 LobMaxSize보다 클 경우 작업이 실패합니다.

작업이 제한된 LOB 모드로 설정되어 있고 이 옵션이 true로 설정된 경우, LOB 데이터가 잘리지 않는 대신에 작업이 실패합니다.

기본값: false

유효 값: 불

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

fetchCacheSize

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

기본 값: 10000

유효한 값: 숫자

ECA 예제: fetchCacheSize=10000;

HeartbeatFrequency

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

기본 값: 5

유효한 값: 숫자

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

HeartbeatSchema

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

기본 값: public

유효값: 문자열

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

MapJsonbAsClob

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

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

MapLongVarcharAs

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

  • WSTRING

  • CLOB

  • NCLOB

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

MapUnboundedNumericAsString

이 파라미터는 숫자 값의 정밀도를 유지하면서 성공적으로 마이그레이션할 수 있도록 제한이 없는 숫자 데이터 형식의 열을 문자열로 취급합니다. 이 파라미터는 PostgreSQL 소스에서 PostgreSQL 대상 또는 PostgreSQL과 호환되는 데이터베이스로 복제하는 경우에만 사용하세요.

기본 값: false

유효값: false/true

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

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

참고

단지 MapUnboundedNumericAsString을 PostgreSQL 소스 및 대상 엔드포인트에서 함께 사용해야 합니다.

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

PostgreSQL이 아닌 대상에 MapUnboundedNumericAsString을 사용하지 마세요.

PluginName

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

유효값: pglogical, test_decoding

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

SlotName

PostgreSQL 원본 인스턴스의 CDC 로드에 대해 이전에 만든 논리적 복제 슬롯의 이름을 설정합니다.

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

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

유효값: 문자열

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

unboundedVarcharMaxSize

이 추가 연결 속성 (ECA) 은 최대 길이 지정자 VarChar 없이 유형으로 정의된 데이터 열의 최대 크기를 정의합니다. 기본값은 8000바이트입니다. 최대값은 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” Batch 적용 기능, 전체 LOB 기능, 데이터 검증 및 Redshift 대상으로 효율적으로 복제할 수 없는 등의 추가 제한이 적용됩니다.

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

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

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

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

  • 대부분의 경우, AWS DMS는 테이블의 CREATE, ALTER, DROP DDL 문 변경 처리를 지원하지만 테이블이 내부 함수 또는 프로시저 본문 블록이나 중첩된 구성체에 있는 경우에는 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 Server 대상에 마이그레이션됩니다. 이 문제를 해결하려면 VARCHAR(1) 데이터 형식으로 열의 테이블을 미리 생성하거나 AWS DMS가 테이블을 생성하도록 합니다. 그런 다음, 다운스트림 처리에서 ‘F’를 False로 처리하고 ‘T’를 True로 처리합니다.

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

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

  • AWS DMS는 동종 마이그레이션에서만 PostGIS 데이터 형식을 지원합니다.

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

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

  • AWS DMS는 (ALTER TABLE 문에서 ALTER COLUMN [SET|DROP] NOT NULL 절을 사용하여) 열 null 가능 여부를 설정하기 위한 변경 처리를 지원하지 않습니다.

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

    Aurora PostgreSQL 버전 13 이상에서는 logical_decoding_work_mem 파라미터를 조정하여 DMS 유출로 인해 데이터가 디스크로 변경되는 시기를 제어할 수 있습니다. 자세한 설명은 Aurora PostgreSQL에서 파일을 유출하세요 섹션을 참조하세요.

  • ARRAY 데이터 형식이 있는 테이블에는 프라이머리 키가 있어야 합니다. 프라이머리 키가 없는 ARRAY 데이터 형식이 있는 테이블은 전체 로드 중에 일시 중단됩니다.

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

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

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

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

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

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

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

  • AWS DMS는 coalesce 함수로 만든 고유 인덱스가 있는 테이블의 복제를 지원하지 않습니다.

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

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

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

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

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

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

  • AWS DMS는 소스로 사용되는 PostgreSQL용 Amazon RDS 프록시에서 CDC를 지원하지 않습니다.

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

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

    alter event trigger awsdms_intercept_ddl enable always;
  • RDS for PostgreSQL 다중 AZ 데이터베이스 클러스터가 논리적 복제를 지원하지 않으므로 AWS DMS는 PostgreSQL이 소스로 사용될 때 Amazon RDS for PostgreSQL에서 CDC를 지원하지 않습니다.

PostgreSQL용 소스 데이터 형식

다음 표에는 AWS DMS를 사용하는 경우 지원되는 PostgreSQL 원본 데이터 형식과 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 Server에서 FLOAT에 매핑됩니다.

CHAR

WSTRING (1)

CHAR(N)

WSTRING (n)

VARCHAR(N)

WSTRING (n)

TEXT

NCLOB

BYTEA

BLOB

TIMESTAMP

DATETIME

TIMESTAMP(시간대 사용)

DATETIME

날짜

날짜

TIME

TIME

TIME WITH TIME ZONE

TIME

INTERVAL

STRING (128) - 1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 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)

PostgreSQL에 LOB 소스 데이터 형식 사용

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

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

  • CLOB - 복제는 각 문자를 UTF8 문자로 취급합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이를 찾습니다(여기에서는 max_num_chars_text로 표시). 이 길이를 사용하여 LOB 크기를 다음으로 제한 값을 지정합니다. 데이터에 4바이트 문자가 포함된 경우, 2를 곱해 Limit LOB size to(LOB 크기를 다음으로 제한) 값(바이트 단위)을 지정합니다. 이 경우, Limit LOB size to(LOB 크기를 다음으로 제한)max_num_chars_text x 2와 같습니다.

  • NCLOB - 복제는 각 문자를 2바이트 문자로 취급합니다. 따라서 열에서 가장 긴 문자 텍스트의 길이(max_num_chars_text)를 찾고 2를 곱합니다. 이렇게 하여 LOB 크기를 다음으로 제한 값을 지정합니다. 이 경우, Limit LOB size to(LOB 크기를 다음으로 제한)max_num_chars_text x 2와 같습니다. 데이터에 4바이트 문자가 포함된 경우에는 다시 2를 곱합니다. 이 경우, Limit LOB size to(LOB 크기를 다음으로 제한)max_num_chars_text x 4와 같습니다.