Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

PostgreSQL

원격 PostgreSQL 서버의 데이터베이스에 연결할 수 있습니다. ClickHouse와 PostgreSQL 간에 데이터를 주고받기 위한 읽기 및 쓰기 작업(SELECTINSERT 쿼리)을 지원합니다.

SHOW TABLESDESCRIBE TABLE 쿼리를 통해 원격 PostgreSQL의 테이블 목록과 테이블 구조에 실시간으로 접근할 수 있습니다.

테이블 구조 수정(ALTER TABLE ... ADD|DROP COLUMN)을 지원합니다. use_table_cache 매개변수(아래 엔진 매개변수 참조)가 1로 설정되면 테이블 구조가 캐시되어 변경 여부를 확인하지 않지만, DETACHATTACH 쿼리로 업데이트할 수 있습니다.

데이터베이스 생성하기

CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);

엔진 매개변수

  • host:port — PostgreSQL 서버 주소입니다.
  • database — 원격 데이터베이스 이름입니다.
  • user — PostgreSQL 사용자입니다.
  • password — 사용자 비밀번호입니다.
  • schema — PostgreSQL 스키마입니다.
  • use_table_cache — 데이터베이스 테이블 구조를 캐시할지 여부를 정의합니다. 선택 사항입니다. 기본값: 0입니다.

TLS/SSL 매개변수는 libpq로 전달되며, 명명된 컬렉션을 통해 제공하거나 후행 키-값 인수로 지정할 수 있습니다. sslmode(disable, allow, prefer, require, verify-ca 또는 verify-full)와 인증서 및 키는 두 가지 형식 중 하나로 제공할 수 있습니다. sslrootcert(CA 인증서), sslcert(클라이언트 인증서), sslkey(클라이언트 개인 키)는 서버 로컬 파일의 경로이며, 서버 구성 파일에 정의된 명명된 컬렉션을 통해서만 허용됩니다. 대신 sslrootcert_pem, sslcert_pem, sslkey_pem에는 해당 파일의 리터럴 내용을 지정할 수 있으며, SQL에서도 지정할 수 있습니다(예: ENGINE = PostgreSQL('host:port', 'database', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...')). 이 값들은 비밀번호와 마찬가지로 로그와 SHOW 쿼리에서 마스킹됩니다. 설정하지 않으면 libpq의 기본값이 적용됩니다(sslmode=prefer).

데이터 타입 지원

PostgreSQL ClickHouse
DATE Date
TIMESTAMP DateTime
REAL Float32
DOUBLE Float64
DECIMAL, NUMERIC Decimal (아래 참고 사항 참조)
SMALLINT Int16
INTEGER Int32
BIGINT Int64
SERIAL UInt32
BIGSERIAL UInt64
TEXT, CHAR String
INTEGER Nullable(Int32)
ARRAY Array

사용 예시

ClickHouse의 데이터베이스가 PostgreSQL 서버와 데이터를 교환하는 경우:

CREATE DATABASE test_database
ENGINE = PostgreSQL('postgres1:5432', 'test_database', 'postgres', 'mysecretpassword', 'schema_name',1);
SHOW DATABASES;
┌─name──────────┐
│ default       │
│ test_database │
│ system        │
└───────────────┘
SHOW TABLES FROM test_database;
┌─name───────┐
│ test_table │
└────────────┘

PostgreSQL 테이블에서 데이터 읽기:

SELECT * FROM test_database.test_table;
┌─id─┬─value─┐
│  1 │     2 │
└────┴───────┘

PostgreSQL 테이블에 데이터 쓰기:

INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘

PostgreSQL에서 테이블 구조가 변경된 경우를 생각해 보겠습니다:

postgre> ALTER TABLE test_table ADD COLUMN data Text

데이터베이스를 생성할 때 use_table_cache 매개변수를 1로 설정했으므로 ClickHouse의 테이블 구조가 캐시되어, 수정되지 않았습니다:

DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
└────────┴───────────────────┘

테이블을 DETACH한 후 다시 ATTACH하니 구조가 업데이트되었습니다:

DETACH TABLE test_database.test_table;
ATTACH TABLE test_database.test_table;
DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
│ data   │ Nullable(String)  │
└────────┴───────────────────┘
Navigation