SELECT 및 INSERT 쿼리를 실행할 수 있습니다.
현재 이 테이블 엔진은 PostgreSQL 12 이상 버전만 지원합니다.
테이블 생성
- 컬럼 이름은 원본 PostgreSQL 테이블의 컬럼 이름과 같아야 하지만, 그중 일부만 사용하거나 순서를 임의로 지정할 수 있습니다.
- 컬럼 타입은 원본 PostgreSQL 테이블의 타입과 달라도 됩니다. ClickHouse는 값을 ClickHouse 데이터 타입으로 cast하려고 시도합니다.
- external_table_functions_use_nulls 설정은 널 허용 컬럼을 처리하는 방식을 정의합니다. 기본값은 1입니다. 값이 0이면 테이블 함수는 널 허용 컬럼을 생성하지 않고 null 대신 기본값을 삽입합니다. 이는 배열 내부의 NULL 값에도 적용됩니다.
host:port— PostgreSQL 서버 주소입니다.database— 원격 데이터베이스 이름입니다.table— 원격 테이블 이름 또는 PostgreSQL에 그대로 전달되는 쿼리입니다(테이블 이름 대신 쿼리 전달 참조).user— PostgreSQL 사용자입니다.password— 사용자 비밀번호입니다.schema— 기본값이 아닌 테이블 스키마입니다. 선택 사항입니다.on_conflict— 충돌 해결 전략입니다. 예시:ON CONFLICT DO NOTHING. 선택 사항입니다. 참고: 이 옵션을 추가하면 삽입 성능이 저하됩니다.
설정
PostgreSQL 테이블 엔진(및 postgresql 테이블 함수)에서 사용하는 연결 풀은 SETTINGS 절을 사용해 테이블별로 구성할 수 있습니다. 설정을 지정하지 않으면 해당 쿼리 수준 postgresql_* 설정 값이 기본값으로 적용됩니다.
postgresql_connection_pool_size
16.
postgresql_connection_pool_wait_timeout
0은 풀이 비어 있으면 계속 대기함을 의미합니다.
기본값: 5000.
postgresql_connection_pool_retries
2.
postgresql_connection_pool_auto_close_connection
false.
postgresql_connection_attempt_timeout
connect_timeout 매개변수로 전달됩니다.
기본값: 2.
예시:
구현 세부 사항
SELECT 쿼리는 각 SELECT 쿼리 후 커밋되는 읽기 전용 PostgreSQL 트랜잭션 내에서 COPY (SELECT ...) TO STDOUT 형태로 실행됩니다.
=, !=, >, >=, <, <=, IN과 같은 단순한 WHERE 절은 PostgreSQL 서버에서 실행됩니다.
모든 조인, 집계, 정렬, IN [ array ] 조건, 그리고 LIMIT 샘플링 제약은 PostgreSQL에 대한 쿼리가 완료된 후에만 ClickHouse에서 실행됩니다.
테이블 이름 대신 쿼리 전달하기
table 인수로 PostgreSQL에 있는 그대로 전달되는 SELECT 쿼리를 사용할 수 있습니다. 테이블의 구조는 쿼리 결과에서 자동으로 추론됩니다. 쿼리는 서브쿼리로 작성하거나 query 함수로 감싸서 작성할 수 있습니다:
INSERT할 수 없습니다. 동일한 구문이 postgresql 테이블 함수에서도 지원됩니다.
서브쿼리 형식
(SELECT ...)은 ClickHouse에서 파싱된 다음 서버로 전송되기 전에 PostgreSQL 방언(PostgreSQL 식별자 인용 및 문자열 리터럴 이스케이프)으로 다시 직렬화됩니다. 따라서 유효한 ClickHouse SQL이어야 합니다. ClickHouse가 파싱하지 않는 PostgreSQL 전용 구문을 전달하려면 query('...') 형식을 사용하십시오. 이 형식의 텍스트는 PostgreSQL로 그대로 전송됩니다.전달된 쿼리에는 이를 둘러싼 ClickHouse 쿼리의 외부 WHERE, LIMIT, 집계 등이 푸시다운되지 않으며, 전체 쿼리 결과를 가져온 후 ClickHouse에서 적용됩니다. PostgreSQL에서 읽는 데이터를 제한하려면 필터를 전달된 쿼리 내부에 넣으십시오. external_table_strict_query = 1을 사용하면 푸시다운할 수 없는 외부 필터는 로컬에서 적용되는 대신 예외와 함께 거부됩니다.INSERT 쿼리는 각 INSERT 문 후 자동 커밋되는 PostgreSQL 트랜잭션 내에서 COPY \"table_name\" (field1, field2, ... fieldN) FROM STDIN 형태로 실행됩니다.
PostgreSQL Array 타입은 ClickHouse 배열로 변환됩니다.
주의하십시오. PostgreSQL에서는
type_name[]처럼 생성된 배열 데이터에 대해, 동일한 컬럼의 서로 다른 테이블 행에 차원 수가 서로 다른 다차원 배열이 포함될 수 있습니다. 그러나 ClickHouse에서는 동일한 컬럼의 모든 테이블 행에서 차원 수가 같은 다차원 배열만 허용됩니다.|로 나열해야 하는 여러 레플리카를 지원합니다. 예를 들면 다음과 같습니다:
0입니다.
아래 예시에서는 레플리카 example01-1의 우선순위가 가장 높습니다: