메인 콘텐츠로 건너뛰기
ClickHouse Cloud 사용자에게는 PostgreSQL을 ClickHouse로 복제할 때 ClickPipes를 사용할 것을 권장합니다. ClickPipes는 PostgreSQL용 고성능 Change Data Capture (CDC)를 네이티브로 지원합니다.
PostgreSQL 테이블의 초기 데이터 덤프를 사용해 ClickHouse 테이블을 생성하고 복제 프로세스를 시작합니다. 즉, 원격 PostgreSQL 데이터베이스의 PostgreSQL 테이블에서 새 변경 사항이 발생할 때마다 이를 적용하는 백그라운드 작업을 실행합니다.
이 테이블 엔진은 실험적 기능입니다. 사용하려면 설정 파일에서 또는 SET 명령을 사용해 allow_experimental_materialized_postgresql_table을 1로 설정하십시오:
SET allow_experimental_materialized_postgresql_table=1
둘 이상의 테이블이 필요한 경우에는 테이블 엔진 대신 MaterializedPostgreSQL 데이터베이스 엔진을 사용하고, 복제할 테이블을 지정하는 materialized_postgresql_tables_list 설정을 사용할 것을 강력히 권장합니다(데이터베이스 schema도 추가할 수 있게 될 예정입니다). 이 방식이 CPU 사용량, 연결 수, 원격 PostgreSQL 데이터베이스 내부의 replication slot 수 측면에서 훨씬 더 효율적입니다.

테이블 생성

CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
엔진 매개변수
  • host:port — PostgreSQL 서버 주소.
  • database — 원격 데이터베이스 이름.
  • table — 원격 테이블 이름.
  • user — PostgreSQL 사용자 이름.
  • password — 사용자 비밀번호.

요구 사항

  1. PostgreSQL 구성 파일에서 wal_level 설정 값은 logical이어야 하며, max_replication_slots 매개변수 값은 최소 2 이상이어야 합니다.
  2. MaterializedPostgreSQL 엔진을 사용하는 테이블에는 PostgreSQL 테이블의 replica identity 인덱스(기본값: 기본 키(primary key))와 동일한 기본 키(primary key)가 있어야 합니다(replica identity 인덱스에 대한 자세한 내용 참조).
  3. Atomic 데이터베이스만 사용할 수 있습니다.
  4. MaterializedPostgreSQL 테이블 엔진은 구현에 PostgreSQL 함수 pg_replication_slot_advance가 필요하므로 PostgreSQL 버전 11 이상에서만 작동합니다.

가상 컬럼

  • _version — 트랜잭션 카운터입니다. 유형: UInt64.
  • _sign — 삭제 표시입니다. 유형: Int8. 가능한 값:
    • 1 — 행이 삭제되지 않음,
    • -1 — 행이 삭제됨.
이 컬럼들은 테이블 생성 시 추가할 필요가 없습니다. SELECT 쿼리에서 항상 사용할 수 있습니다. _version 컬럼은 WALLSN 위치와 같으므로, 복제가 얼마나 최신 상태인지 확인하는 데 사용할 수 있습니다.
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;

SELECT key, value, _version FROM postgresql_db.postgresql_replica;
TOAST 값의 복제는 지원되지 않습니다. 대신 해당 데이터 타입의 기본값이 사용됩니다.
마지막 수정일 2026년 6월 10일