메인 콘텐츠로 건너뛰기
ClickHouse Cloud에는 외부 PostgreSQL 데이터베이스를 Managed Postgres 서비스로 마이그레이션하는 기본 제공 가져오기 마법사가 포함되어 있습니다. 이 마법사는 5개의 안내 단계에 걸쳐 소스 연결, 스키마 내보내기 및 가져오기, 복제 설정, 테이블 선택을 처리합니다.

사전 요구 사항

  • 복제 권한이 있는 사용자 계정으로 원본 PostgreSQL 데이터베이스에 접근할 수 있어야 합니다.
  • 마이그레이션 대상이 될 ClickHouse Managed Postgres 서비스가 있어야 합니다. 아직 없다면 quickstart를 참조하세요.
  • 로컬 머신에 pg_dumppsql이 설치되어 있어야 합니다. 둘 다 표준 PostgreSQL 클라이언트 도구에 포함되어 있습니다.

마이그레이션 전에 고려할 사항

  • DDL 전파: 지속적 복제(CDC)는 DML 작업과 ADD COLUMN을 포착합니다. DROP COLUMNALTER COLUMN과 같은 다른 DDL 변경 사항은 전파되지 않으므로 대상 시스템에 수동으로 적용해야 합니다.

1단계: 원본 데이터베이스에 연결

ClickHouse Cloud 콘솔을 열고 Managed Postgres 서비스를 선택합니다. 왼쪽 사이드바에서 데이터 소스를 클릭합니다. Start import를 클릭합니다. 원본 PostgreSQL 데이터베이스의 연결 정보를 입력합니다: 호스트, 포트, 사용자 이름, 비밀번호, 데이터베이스 이름. 원본 데이터베이스에서 요구하는 경우 TLS를 활성화합니다. 원본 데이터베이스에 대한 비공개 연결이 필요하다면 SSH tunneling을 선택하고 필요한 SSH 정보를 입력할 수 있습니다. 이렇게 하면 공개적으로 접근할 수 없는 데이터베이스에도 마이그레이션이 안전하게 연결할 수 있습니다. 수집 방법을 선택합니다:
  • Initial load + CDC — 기존 데이터를 복사한 다음, 이후 변경 사항도 계속 대상에 동기화합니다.
  • Initial load only — 1회성 복사이며, 이후 복제는 수행하지 않습니다.
  • CDC only — 초기 복사를 건너뛰고 이 시점부터 발생하는 새 변경 사항만 복제합니다.
다음을 클릭합니다.

2단계: 데이터베이스 스키마(schema) 내보내기

마법사에 소스 연결 정보가 미리 입력된 pg_dump 명령이 표시됩니다. 터미널에서 실행하세요:
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
이렇게 하면 현재 디렉터리에 pg.sql 파일이 생성됩니다. 다음을 클릭하세요.

3단계: 스키마를 Managed Postgres 서비스로 가져오기

드롭다운에서 대상 데이터베이스를 선택하거나 Create a new database를 클릭해 새 데이터베이스를 프로비저닝합니다. 마법사에 스키마 dump를 Managed Postgres 서비스에 적용하는 psql 명령이 표시됩니다. 터미널에서 실행하세요:
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
다음을 클릭하세요.

Step 4: 수집 설정 구성

논리적 복제에 사용할 publication을 지정합니다. 이 값을 비워 두면 publication이 자동으로 생성됩니다. 처리량을 조정하려면 고급 복제 설정을 펼치세요:
설정기본값설명
동기화 간격(초)10replication slot을 폴링하는 주기
초기 적재용 병렬 스레드 수4대량 복사 단계에 사용할 스레드 수
Pull 배치 크기100,000복제 배치마다 가져오는 행 수
스냅샷 파티션당 행 수100000대용량 테이블 스냅샷의 파티션 크기
병렬 스냅샷 테이블 수1동시에 스냅샷되는 테이블 수
다음을 클릭하세요.

5단계: 테이블 선택

복제할 테이블을 선택합니다. 테이블은 스키마(schema)별로 그룹화되어 있습니다. 개별 테이블을 선택하거나 스키마를 펼쳐 모두 선택합니다. Create migration 버튼을 클릭합니다.

마이그레이션 모니터링

마이그레이션을 생성하면 데이터 소스실행 중 상태로 표시됩니다. 마이그레이션을 클릭하면 세부 정보 화면이 열립니다. 테이블 탭에는 각 테이블의 초기 적재 진행 상황이 표시되며, 처리된 행 수, 파티션, 파티션당 평균 소요 시간이 포함됩니다. 메트릭 탭에는 CDC가 시작되면 복제 지연과 처리량이 표시됩니다.

마이그레이션 후 작업

초기 적재가 완료되고, CDC를 사용하는 경우 복제 지연이 거의 0이 되면 다음을 수행하십시오: 행 수를 검증합니다. 트래픽을 전환하기 전에 원본과 대상의 주요 테이블을 표본 점검하십시오:
SELECT COUNT(*) FROM public.orders;
소스 시스템에 대한 쓰기를 중지합니다. 애플리케이션의 쓰기 작업을 일시 중지하세요. 컷오버 중 읽기 전용 모드를 적용하려면:
ALTER DATABASE <source_db> SET default_transaction_read_only = on;
복제가 최신 상태까지 반영되었는지 확인합니다. 원본과 대상의 가장 최근 행을 비교합니다:
-- 소스와 대상 모두에서 실행
SELECT MAX(id), MAX(updated_at) FROM public.orders;
시퀀스를 재설정합니다. 각 테이블의 현재 최댓값에 맞게 시퀀스를 조정합니다:
DO $$
DECLARE r RECORD;
BEGIN
    FOR r IN
        SELECT
            n.nspname AS schema_name,
            c.relname AS table_name,
            a.attname AS column_name,
            pg_get_serial_sequence(format('%I.%I', n.nspname, c.relname), a.attname) AS seq_name
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        JOIN pg_attribute a ON a.attrelid = c.oid
        WHERE c.relkind = 'r'
            AND a.attnum > 0
            AND NOT a.attisdropped
            AND n.nspname NOT IN ('pg_catalog', 'information_schema')
    LOOP
        IF r.seq_name IS NOT NULL THEN
            EXECUTE format(
                'SELECT setval(%L, COALESCE((SELECT MAX(%I) FROM %I.%I), 0) + 1, false)',
                r.seq_name, r.column_name, r.schema_name, r.table_name
            );
        END IF;
    END LOOP;
END $$;
애플리케이션 트래픽을 전환합니다. 읽기 및 쓰기 트래픽이 Managed Postgres 서비스로 향하도록 전환하고, 오류, 제약 조건 위반, 복제 상태를 모니터링하십시오. 정리합니다. 전환을 완료하고 새 서비스가 정상적으로 작동하는 것을 확인했다면 데이터 소스에서 마이그레이션을 삭제하십시오. CDC를 사용한 경우 리소스를 확보할 수 있도록 원본에서 replication slot을 삭제하십시오:
SELECT pg_drop_replication_slot('<slot_name>');

다음 단계

마지막 수정일 2026년 6월 10일