PostgreSQL에서 Azure Database for PostgreSQL로의 온라인 마이그레이션과 관련된 알려진 문제/제한 사항

다음 섹션에서는 PostgreSQL에서 Azure Database for PostgreSQL로의 온라인 마이그레이션과 관련된 알려진 문제 및 제한 사항에 대해 설명합니다.

온라인 마이그레이션 구성

  • 원본 PostgreSQL Server는 버전 9.4, 9.5, 9.6, 10 또는 11을 실행해야 합니다. 자세한 내용은 지원되는 PostgreSQL 데이터베이스 버전을 참조하세요.

  • 동일하거나 더 높은 버전으로의 마이그레이션만 지원됩니다. 예를 들어, PostgreSQL 9.5를 Azure Database for PostgreSQL 9.6 또는 10으로 마이그레이션하는 것은 지원됩니다. PostgreSQL 11에서 PostgreSQL 9.6으로 마이그레이션하는 것은 지원되지 않습니다.

  • 원본 PostgreSQL postgresql.conf 파일에서 논리 복제를 사용하도록 설정하려면 다음 매개 변수를 설정합니다.

    • wal_level: 논리적으로 설정합니다.
    • max_replication_slots: 마이그레이션할 데이터베이스의 최대 수 이상을 설정합니다. 데이터베이스 네 개를 마이그레이션하려면 값을 4 이상으로 설정합니다.
    • max_wal_senders: 동시에 실행되는 데이터베이스의 수를 설정합니다. 권장 값은 10입니다.
  • 원본 PostgresSQL pg_hba.conf에 DMS 에이전트 IP를 추가합니다.

    1. Azure Database Migration Service 인스턴스 프로비저닝을 마친 후 DMS IP 주소를 기록해 둡니다.

    2. pg_hba.conf 파일에 IP 주소를 추가합니다.

          host    all    172.16.136.18/10    md5
          host    replication postgres    172.16.136.18/10     md5
      
  • 사용자에게 원본 데이터베이스를 호스팅하는 서버에 대한 복제 역할이 있어야 합니다.

  • 원본 및 대상 데이터베이스 스키마가 일치해야 합니다.

크기 제한

  • 단일 DMS 서비스를 사용하여 PostgreSQL에서 Azure Database for PostgreSQL로 최대 1TB의 데이터를 마이그레이션할 수 있습니다.
  • DMS를 사용하면 사용자가 마이그레이션하려는 데이터베이스 내의 테이블을 선택할 수 있습니다. 테이블 선택 옵션을 보여 주는 D M S 화면의 스크린샷

백그라운드에서 다음 옵션 중 하나를 사용하여 선택한 테이블의 덤프를 수행하는 데 사용되는 pg_dump 명령이 있습니다.

  • -T - UI에서 선택한 테이블 이름 포함
  • -t - 사용자가 선택하지 않은 테이블 이름 제외

-t 또는 -T 옵션 뒤에 오는 pg_dump 명령의 일부로 포함할 수 있는 최대 문자 수에는 7,500자의 제한이 있습니다. pg_dump 명령은 선택한 테이블 또는 선택하지 않은 테이블 중 더 적은 쪽의 문자 수를 사용합니다. 선택한 테이블과 선택하지 않은 테이블의 문자 수가 7,500자를 초과하면 오류가 발생하여 pg_dump 명령이 실패합니다.

이전 예제에서 pg_dump 명령은 다음과 같습니다.

pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""

이전 명령의 문자 수는 55자입니다(큰따옴표, 공백, -T, 슬래시 포함).

데이터 형식 제한 사항

제한: 테이블에 기본 키가 없으면 변경 내용이 대상 데이터베이스에 동기화되지 않을 수 있습니다.

해결 방법: 마이그레이션을 계속할 수 있도록 일시적으로 테이블에 대한 기본 키를 설정합니다. 데이터 마이그레이션이 완료되면 기본 키를 제거합니다.

AWS RDS PostgreSQL에서의 온라인 마이그레이션 제한 사항

AWS(Amazon Web Service) RDS(관계형 데이터베이스) PostgreSQL에서 Azure Database for PostgreSQL으로 온라인 마이그레이션을 수행하려고 하면 다음과 같은 오류가 발생할 수 있습니다.

  • 오류: '{database}' 데이터베이스의 '{table}' 테이블에 있는 '{column}' 열의 기본값이 원본 서버와 대상 서버에서 서로 다릅니다. 원본은 '{value on source}'이고 대상은 '{value on target}'입니다.

    제한: 이 오류는 원본 데이터베이스와 대상 데이터베이스 간에 열 스키마의 기본값이 다를 때 발생합니다.

    해결 방법: 대상의 스키마를 원본의 스키마와 일치하는지 확인합니다. 스키마 마이그레이션에 대한 자세한 내용은 Azure Database for PostgreSQL 온라인 마이그레이션 설명서를 참조하세요.

  • 오류: '{database}' 대상 데이터베이스에는 테이블이 '{number of tables}'개 있고, '{database}' 원본 데이터베이스에는 테이블이 '{number of tables}'개 있습니다. 원본과 대상 데이터베이스의 테이블 수가 같아야 합니다.

    제한: 이 오류는 원본 데이터베이스와 대상 데이터베이스 간에 테이블 수가 다를 때 발생합니다.

    해결 방법: 대상의 스키마를 원본의 스키마와 일치하는지 확인합니다. 스키마 마이그레이션에 대한 자세한 내용은 Azure Database for PostgreSQL 온라인 마이그레이션 설명서를 참조하세요.

  • 오류: {database} 원본 데이터베이스가 비어 있습니다.

    제한:이 오류는 원본 데이터베이스가 비어 있을 때 발생합니다. 잘못된 데이터베이스를 원본으로 선택했을 수 있습니다.

    해결 방법: 마이그레이션을 위해 선택한 원본 데이터베이스를 다시 확인한 다음 다시 시도하세요.

  • 오류: {database} 대상 데이터베이스가 비어 있습니다. 스키마 마이그레이션

    제한:이 오류는 대상 데이터베이스에 스키마가 없을 때 발생합니다. 대상의 스키마가 원본의 스키마와 일치하는지 확인합니다.

    해결 방법: 대상의 스키마를 원본의 스키마와 일치하는지 확인합니다. 스키마 마이그레이션에 대한 자세한 내용은 Azure Database for PostgreSQL 온라인 마이그레이션 설명서를 참조하세요.

기타 제한 사항

  • 데이터베이스 이름에는 세미콜론(;)을 포함할 수 없습니다.
  • 캡처된 테이블에는 기본 키가 있어야 합니다. 테이블에 기본 키가 없는 경우 DELETE 및 UPDATE 레코드 작업의 결과를 예측할 수 없습니다.
  • 기본 키 세그먼트 업데이트는 무시됩니다. 해당 업데이트를 적용하면 대상에서 모든 행을 업데이트하지 않은 업데이트로 식별합니다. 그 결과 예외 테이블에 레코드가 기록됩니다.
  • 테이블에 JSON 열이 있는 경우 이 테이블에 대한 DELETE 또는 UPDATE 작업으로 인해 마이그레이션에 실패할 수 있습니다.
  • 이름은 같지만 대/소문자가 다른 여러 테이블을 마이그레이션하는 것은 예측할 수 없는 동작이 발생할 수 있으므로 지원되지 않습니다. 예로 table1, TABLE1, Table1을 사용하는 경우를 들 수 있습니다.
  • [CREATE | ALTER | DROP | TRUNCATE] 테이블 DDL은 지원되지 않습니다.
  • Database Migration Service의 단일 마이그레이션 작업에서는 최대 4개의 데이터베이스만 수용할 수 있습니다.
  • pg_largeobject 테이블의 마이그레이션은 지원되지 않습니다.