SELECT 및 INSERT 쿼리를 수행할 수 있습니다.
구문
인수
인수는 이름이 지정된 컬렉션을 사용해 전달할 수도 있습니다. 이 경우
host와 port는 별도로 지정해야 합니다. 프로덕션 환경에서는 이 방식을 권장합니다.
반환 값
컬럼 이름 목록이 포함된 테이블 이름과 테이블 함수
postgresql(...)를 INSERT 쿼리에서 구분하려면 FUNCTION 또는 TABLE FUNCTION 키워드를 사용해야 합니다. 아래 예시를 참조하십시오.설정
postgresql 테이블 함수(및 PostgreSQL 테이블 엔진)에서 사용하는 연결 풀은 끝에 추가하는 SETTINGS 절로 구성할 수 있습니다. 설정을 지정하지 않으면 해당 쿼리 수준의 postgresql_* 설정 값이 기본값으로 사용됩니다. postgresql_connection_pool_* 및 postgresql_connection_attempt_timeout 설정의 전체 목록과 기본값은 테이블 엔진의 설정 섹션을 참조하십시오.
예시:
구현 세부 사항
SELECT 쿼리는 각 SELECT 쿼리 후 커밋되는 읽기 전용 PostgreSQL 트랜잭션 내에서 COPY (SELECT ...) TO STDOUT 형태로 실행됩니다.
=, !=, >, >=, <, <=, IN과 같은 단순한 WHERE 절은 PostgreSQL 서버에서 실행됩니다.
모든 조인, 집계, 정렬, IN [ array ] 조건 및 LIMIT 샘플링 제약은 PostgreSQL 쿼리가 완료된 후에만 ClickHouse에서 실행됩니다.
테이블 이름 대신 쿼리 전달하기
SELECT 쿼리를 사용할 수 있습니다. 결과 테이블의 구조는 쿼리 결과로부터 추론됩니다. 쿼리는 서브쿼리로 작성하거나 query 함수로 감싸서 작성할 수 있습니다:
INSERT는 허용되지 않습니다. 동일한 구문이 PostgreSQL 테이블 엔진에서도 지원됩니다.
(SELECT ...) 형태의 서브쿼리는 서버로 전송되기 전에 ClickHouse에서 파싱된 다음 PostgreSQL 방언(PostgreSQL 식별자 인용 및 문자열 리터럴 이스케이프)으로 다시 직렬화됩니다. 따라서 유효한 ClickHouse SQL이어야 합니다. ClickHouse가 파싱하지 않는 PostgreSQL 전용 구문을 전달하려면 텍스트가 PostgreSQL로 그대로 전송되는 query('...') 형식을 사용하십시오.바깥쪽 ClickHouse 쿼리의 외부 WHERE, LIMIT, 집계 등은 전달된 쿼리로 푸시다운되지 않습니다 — 전체 쿼리 결과를 가져온 후 ClickHouse에서 적용됩니다. PostgreSQL에서 읽는 데이터를 제한하려면 필터를 전달된 쿼리 내부에 넣으십시오. external_table_strict_query = 1을 사용하면 푸시다운할 수 없는 외부 필터는 로컬에서 적용되는 대신 예외와 함께 거부됩니다.INSERT 쿼리는 각 INSERT 문 후 자동 커밋되는 PostgreSQL 트랜잭션 내에서 COPY \"table_name\" (field1, field2, ... fieldN) FROM STDIN 형태로 실행됩니다.
PostgreSQL 배열 타입은 ClickHouse 배열로 변환됩니다.
주의하십시오. PostgreSQL에서는 Integer[]와 같은 배열 데이터 타입 컬럼에 행마다 서로 다른 차원의 배열이 들어갈 수 있지만, ClickHouse에서는 모든 행에서 동일한 차원의 다차원 배열만 허용됩니다.
|로 구분해 나열해야 합니다. 예시는 다음과 같습니다:
0입니다.
예시
PeerDB를 사용해 Postgres 데이터를 복제하거나 마이그레이션하기
테이블 함수 외에도 ClickHouse의 PeerDB를 사용하면 Postgres에서 ClickHouse로 이어지는 연속적인 데이터 파이프라인을 언제든지 설정할 수 있습니다. PeerDB는 CDC(Change Data Capture)를 사용해 Postgres에서 ClickHouse로 데이터를 복제하도록 특별히 설계된 도구입니다.