Linux, UNIX 및 Windows용 IBM DB2에서 PostgreSQL용 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora PostgreSQL 호환 버전으로 마이그레이션 - AWS Schema Conversion Tool

Linux, UNIX 및 Windows용 IBM DB2에서 PostgreSQL용 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora PostgreSQL 호환 버전으로 마이그레이션

IBM DB2 LUW를 PostgreSQL로 마이그레이션하는 경우, AWS SCT에서 Db2 LUW에 사용되는 다양한 트리거 문을 변환할 수 있습니다. 이러한 트리거 명령문에는 다음이 포함됩니다.

  • 트리거 이벤트 – INSERT, DELETE, UPDATE 트리거 이벤트는 대상 테이블이나 대상 보기에 이벤트가 적용될 때마다 트리거된 작업이 실행되도록 지정합니다. INSERT, DELETE, UPDATE 이벤트를 조합하여 지정할 수 있지만 각 이벤트를 한 번씩만 지정할 수 있습니다. AWS SCT는 한 개 또는 여러 개의 트리거 이벤트를 지원합니다. 이벤트에 대해 PostgreSQL은 거의 동일한 기능을 제공합니다.

  • OF COLUMN 이벤트 - 기본 테이블의 열 이름을 지정할 수 있습니다. 트리거는 열 이름 목록에서 식별된 열을 업데이트해야만 활성화됩니다. PostgreSQL에도 동일한 기능이 있습니다.

  • 명령문 트리거 - 전체 명령문에 대해 트리거된 작업이 한 번만 적용되도록 지정합니다. BEFORE 트리거 또는 INSTEAD OF 트리거에는 이러한 유형의 트리거 세부 수준을 지정할 수 없습니다. 지정된 경우에는 영향을 받는 행이 없더라도 UPDATE 또는 DELETE 트리거가 활성화됩니다. PostgreSQL에도 이 기능이 있으며, 명령문 트리거에 대한 트리거 선언은 PostgreSQL과 Db2 LUW에서 동일합니다.

  • 참조 절 - 변환 변수의 상관 관계 이름과 변환 테이블의 테이블 이름을 지정합니다. 상관 관계 이름은 트리거 SQL 작업의 영향을 받는 행 집합에서 특정 행을 식별합니다. 테이블 이름은 영향 받는 전체 행 집합을 식별합니다. 트리거 SQL 작업의 영향을 받는 각 행은 지정된 상관 관계 이름을 가진 열을 한정함으로써 트리거된 작업에 사용할 수 있습니다. PostgreSQL은 이 기능을 지원하지 않으며 NEW 또는 OLD 상관 관계 이름만 사용합니다.

  • INSTEAD OF 트리거 - AWS SCT에서 이러한 트리거를 지원합니다.

Db2 LUW 파티션 테이블을 PostgreSQL 버전 10 파티션 테이블 변환

AWS SCT는 Db2 LUW 테이블을 PostgreSQL 10의 파티션 테이블로 변환할 수 있습니다. Db2 LUW 파티션 테이블을 PostgreSQL로 변환할 때는 다음과 같은 몇 가지 제한 사항이 있습니다.

  • Db2 LUW에서 null이 허용되는 열을 포함하는 파티션 테이블을 생성할 수 있으며 NULL 값을 저장할 파티션을 지정할 수 있습니다. 하지만 PostgreSQL은 RANGE 파티셔닝에서 NULL 값을 지원하지 않습니다.

  • Db2 LUW는 INCLUSIVE 또는 EXCLUSIVE 절을 사용하여 범위 경계 값을 설정할 수 있습니다. PostgreSQL은 시작 경계의 경우 INCLUSIVE, 끝 경계의 경우 EXCLUSIVE만 지원합니다. 변환된 파티션 이름은 <original_table_name>_<original_partition_name> 형식입니다.

  • Db2 LUW에서 파티션 테이블의 기본 키 또는 고유 키를 생성할 수 있습니다. PostgreSQL에서는 각 파티션의 기본 키 또는 고유 키를 직접 생성해야 합니다. 기본 또는 고유 키 제약 조건은 상위 테이블에서 제거해야 합니다. 변환된 키 이름은 <original_key_name>_<original_partition _name> 형식입니다.

  • Db2 LUW에서는 파티션 테이블에서 또는 파티션 테이블로의 외래 키 제약 조건을 생성할 수 있습니다. 하지만 PostgreSQL은 파티션 테이블에서 외래 키 참조를 지원하지 않습니다. 또한 PostgreSQL은 파티션 테이블에서 다른 테이블로의 외래 키 참조를 지원하지 않습니다.

  • Db2 LUW의 파티션 테이블에 인덱스를 생성할 수 있습니다. 하지만 PostgreSQL에서는 각 파티션에 대한 인덱스를 직접 생성해야 합니다. 인덱스는 상위 테이블에서 제거해야 합니다. 변환된 인덱스 이름은 <original_index_name>_<original_partition_name> 형식입니다.

  • 행 트리거는 파티션 테이블이 아닌 개별 파티션에 정의해야 합니다. 트리거는 상위 테이블에서 제거해야 합니다. 변환된 트리거 이름은 <original_trigger_name>_<original_partition_name> 형식입니다.

PostgreSQL을 대상으로 사용하기 위한 권한

PostgreSQL을 대상으로 사용하려면 AWS SCT에 CREATE ON DATABASE 권한이 필요합니다. 각 대상 PostgreSQL 데이터베이스에 대해 이 권한을 부여해야 합니다.

변환된 공개 동의어를 사용하려면 데이터베이스 기본 검색 경로를 "$user", public_synonyms, public으로 변경합니다.

다음 코드 예제를 사용하여 데이터베이스 사용자를 생성하고 권한을 부여할 수 있습니다.

CREATE ROLE user_name LOGIN PASSWORD 'your_password'; GRANT CREATE ON DATABASE db_name TO user_name; ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;

이전 예제에서 user_name을 사용자 이름으로 바꿉니다. 그런 다음 db_name을 대상 데이터베이스의 이름으로 바꿉니다. 마지막으로 your_password를 안전한 암호로 바꿉니다.

PostgreSQL에서는 스키마 소유자 또는 superuser만 스키마를 삭제할 수 있습니다. 소유자는 스키마 소유자가 일부 객체를 소유하지 않은 경우에도 스키마 및 이 스키마에 포함된 모든 객체를 삭제할 수 있습니다.

여러 사용자를 통해 대상 데이터베이스를 변환하고 다른 스키마를 적용할 때 AWS SCT에서 스키마를 삭제할 수 없는 경우 오류 메시지가 표시될 수 있습니다. 이 오류 메시지가 표시되지 않도록 하려면 superuser 역할을 사용하세요.