소스 데이터베이스에서 대상 데이터베이스로 스키마, 데이터, 메타데이터를 마이그레이션할 때는 모든 정보가 정확하게 마이그레이션되는지 확인해야 합니다. Database Migration Service는 한 PostgreSQL 데이터베이스에서 다른 PostgreSQL 데이터베이스로 데이터베이스 객체 (스키마, 데이터, 메타데이터 포함)를 마이그레이션하는 충실도 높은 메커니즘을 제공합니다.
마이그레이션 프로세스 중에는 데이터와 제약조건이 구조화된 단계로 마이그레이션됩니다. 데이터는 초기 스냅샷 로드 중에 먼저 마이그레이션되고 기본 키, 외래 키, 색인과 같은 제약 조건은 초기 로드가 완료된 후 대상 인스턴스에 다시 생성됩니다.
다음 데이터, 스키마, 메타데이터 구성요소는 데이터베이스 마이그레이션의 일부로 마이그레이션됩니다.
데이터
마이그레이션을 위해 선택한 데이터베이스의 모든 테이블 및 스키마(다음 시스템 스키마 제외):
- 정보 스키마 (
information_schema) pg_로 시작하는 모든 스키마 (예:pg_catalog,pg_toast)
이러한 시스템 스키마에 대한 자세한 내용은 알려진 제한사항을 참조하세요.
마이그레이션이 진행되는 동안 마이그레이션 작업에서 데이터베이스를 추가하거나 삭제할 수 있습니다. 데이터베이스를 삭제하면 대상 인스턴스에서 이미 마이그레이션된 데이터베이스를 삭제하지 않고 해당 데이터베이스의 복제가 중지됩니다. 자세한 내용은 마이그레이션 작업 수정을 참조하세요.
- 정보 스키마 (
스키마
객체 이름 지정
기본 키
데이터 유형
순서 열 위치
기본값
null 허용 여부
ID 및 일련번호 속성
보조 색인
메타데이터
저장 프로시저
함수
트리거
조회수
외래 키 제약 조건
지속적 이전
데이터 조작 언어 (DML) 변경사항 (예: 기본 키 또는 복제본 ID가 있는 테이블의 INSERT, UPDATE, DELETE 작업)은 연속 마이그레이션 중에 자동으로 복제됩니다.
마이그레이션 프로세스 중에 소스 데이터베이스에 데이터 정의 언어 (DDL) 변경사항이 있는 경우 데이터베이스가 호환되도록 대상 인스턴스를 업데이트해야 합니다. 다음과 같은 방법으로 DDL 변경사항을 수행할 수 있습니다.
수동 DDL 실행: 소스 데이터베이스에 대한 쓰기를 중지하고 소스 데이터베이스에서 DDL 명령어를 실행하고 대상 데이터베이스에서 일치하는 DDL 명령어를 실행합니다. 대상에서 DDL 명령어를 실행하기 전에 변경사항을 적용하는 Cloud SQL 사용자에게
cloudsqlexternalsync역할을 부여합니다.pglogical를 사용한 복제된 DDL 명령어:pglogical.replicate_ddl_command를 사용하여 복제 스트림의 일관된 지점에서 소스 및 대상 데이터베이스 모두에서 DDL을 실행할 수 있습니다. 이 명령어를 실행하는 사용자는 소스 및 대상 인스턴스 모두에서 일치하는 사용자 인증 정보를 가지고 있어야 하며, 수정된 객체의 수퍼유저 또는 소유자여야 합니다.
다음 탭에서는 pglogical.replicate_ddl_command을 사용하는 일반적인 DDL 작업의 샘플 SQL 명령어를 제공합니다.
기본 키가 있는 테이블
기본 키가 있는 테이블에 열 추가
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default}' );
기본 키가 있는 테이블 이름 변경
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
기본 키가 있는 테이블 만들기
소스 데이터베이스에서 다음 명령어를 실행합니다.
SELECT pglogical.replicate_ddl_command( command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);', replication_sets := ARRAY['default'] ); SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');
기본 키가 없는 테이블
기본 키가 없는 테이블에 열 추가
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default_insert_only}' );
기본 키가 없는 테이블 이름 변경
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
기본 키 없이 테이블 만들기
소스 데이터베이스에서 다음 명령어를 실행합니다.
SELECT pglogical.replicate_ddl_command( command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);', replication_sets := ARRAY['default_insert_only'] ); SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');
이전되지 않는 항목
사용자 및 권한: 사용자 로그인 사용자 인증 정보 및 역할은 이전되지 않습니다. 대상 인스턴스에서 사용자를 구성하려면 Google Cloud 콘솔의 사용자 탭을 사용하거나 SQL 클라이언트를 사용하여 관리합니다. 자세한 내용은 Cloud SQL 문서의 사용자 만들기 및 관리를 참조하세요.
지원되지 않는 확장 프로그램: Database Migration Service는 Cloud SQL에서 지원되지 않는 확장 프로그램을 마이그레이션하지 않습니다. 이러한 확장 프로그램이 있어도 마이그레이션 작업이 차단되지는 않지만 지원되지 않는 확장 프로그램을 참조하는 애플리케이션에서 오류가 발생할 수 있습니다. 지원되는 확장 프로그램 목록은 Cloud SQL 문서의 PostgreSQL 확장 프로그램을 참조하세요.
대규모 객체: PostgreSQL 대규모 객체 (
pg_largeobject를 참조하는 데이터 유형oid)는 논리적 디코딩으로 복제되지 않습니다.기본 키가 없는 테이블: Database Migration Service는 초기 스냅샷을 마이그레이션하고 CDC 단계에서
INSERT문을 복제합니다.UPDATE및DELETE문의 경우:표준 마이그레이션: 표준 마이그레이션에서는 테이블에
UPDATE및DELETE문을 복제할 기본 키가 있어야 합니다.빠른 시작 마이그레이션: 빠른 시작 마이그레이션에서는 복제본 ID를
INDEX또는FULL로 설정하는 경우UPDATE및DELETE작업을 복제하는 데 기본 키가 필요하지 않습니다.REPLICA IDENTITY FULL를 구성하면 미리 쓰기 로그 (WAL) 볼륨과 리소스 오버헤드가 증가합니다. 가능한 경우 기본 키를 추가하는 것이 좋습니다. 자세한 내용은 PostgreSQL 복제본 ID 문서 및 빠른 시작 이전 가이드를 참조하세요.
구체화된 뷰: Database Migration Service는 구체화된 뷰 정의를 마이그레이션하지만 기본 캐시된 데이터는 마이그레이션하지 않습니다. 대상에서 구체화된 뷰를 채우려면 마이그레이션 후
REFRESH MATERIALIZED VIEW view_name를 실행합니다.시퀀스 상태: CDC가 진행되는 동안 대상 인스턴스의 시퀀스 (예:
last_value)의 현재 값이 소스와 다를 수 있습니다. 시퀀스 값은 최종 승격 단계에서 동기화됩니다.커스텀 테이블스페이스: Cloud SQL은 커스텀 테이블스페이스를 지원하지 않습니다. 커스텀 테이블스페이스에 정의된 객체는 Cloud SQL의 기본
pg_default테이블스페이스에 자동으로 다시 매핑됩니다.
다음 단계
전체 제한사항 세부정보는 알려진 제한사항을 참조하세요.
마이그레이션 둘러보기를 시작하려면 PostgreSQL용 Cloud SQL 마이그레이션 시작하기를 참조하세요.