Справочная документация по pg_clickhouse
Описание
pg_clickhouse — это расширение PostgreSQL, которое позволяет выполнять удалённые запросы к базам данных ClickHouse, включая [обёртку внешних данных (foreign data wrapper)]. Оно поддерживает PostgreSQL 13 и новее и ClickHouse 23 и новее.
Начало работы
Самый простой способ попробовать pg_clickhouse — использовать Docker image, который представляет собой стандартный Docker-образ PostgreSQL с расширением pg_clickhouse:
См. руководство, чтобы начать импортировать таблицы ClickHouse и настроить проброс запросов в ClickHouse.
Использование
Политика версионирования
pg_clickhouse следует Semantic Versioning для своих публичных релизов.
- Основная (major) версия увеличивается при изменениях API
- Минорная (minor) версия увеличивается при обратно совместимых изменениях SQL
- Патч-версия (patch) увеличивается при изменениях, касающихся только бинарных файлов
После установки PostgreSQL отслеживает два варианта версии:
- Версия библиотеки (определяется
PG_MODULE_MAGICв PostgreSQL 18 и выше) включает полную семантическую версию, которая видна в выводе функцииpg_get_loaded_modules(). - Версия расширения (определяется в control-файле) включает только основную и
минорную версии, видна в таблице
pg_catalog.pg_extension, в выводе функцииpg_available_extension_versions()и в\dx pg_clickhouse.
На практике это означает, что релиз, в котором увеличивается патч-версия,
например с v0.1.0 до v0.1.1, применяется ко всем базам данных, которые
загрузили v0.1, и им не нужно выполнять ALTER EXTENSION, чтобы получить
преимущества обновления.
Релиз, в котором увеличивается минорная или основная версия, напротив,
будет сопровождаться SQL-скриптами обновления, и все существующие базы данных,
содержащие расширение, должны выполнить ALTER EXTENSION pg_clickhouse UPDATE,
чтобы получить преимущества обновления.
Справочник по SQL
В следующих SQL-примерах используется pg_clickhouse.
CREATE EXTENSION
Используйте CREATE EXTENSION, чтобы добавить pg_clickhouse в базу данных:
Используйте WITH SCHEMA, чтобы установить расширение в определённую схему (рекомендуется):
ALTER EXTENSION
Используйте ALTER EXTENSION, чтобы изменить расширение pg_clickhouse. Примеры:
-
После установки нового релиза pg_clickhouse используйте предложение
UPDATE: -
Используйте
SET SCHEMA, чтобы перенести расширение в новую схему:
DROP EXTENSION
Используйте DROP EXTENSION, чтобы удалить расширение pg_clickhouse из базы данных:
Эта команда завершится ошибкой, если существуют какие‑либо объекты, зависящие от pg_clickhouse. Используйте предложение CASCADE, чтобы удалить их также:
CREATE SERVER
Используйте CREATE SERVER, чтобы создать удалённый сервер, который подключается к серверу ClickHouse. Пример:
Поддерживаемые параметры:
driver: драйвер подключения к ClickHouse — либо "binary", либо "http". Обязательный параметр.dbname: база данных ClickHouse, используемая при подключении. По умолчанию — "default".host: имя хоста сервера ClickHouse. По умолчанию "localhost".port: порт для подключения к серверу ClickHouse. Значения по умолчанию:- 9440, если
driver— "binary" иhost— хост ClickHouse Cloud - 9004, если
driver— "binary" иhostне является хостом ClickHouse Cloud - 8443, если
driver— "http" иhost— хост ClickHouse Cloud - 8123, если
driver— "http" иhostне является хостом ClickHouse Cloud
- 9440, если
ALTER SERVER
Используйте ALTER SERVER для изменения внешнего сервера. Например:
Параметры те же, что и у CREATE SERVER.
DROP SERVER
Используйте DROP SERVER для удаления внешнего сервера:
Эта команда приведёт к ошибке, если от сервера зависят какие-либо другие объекты. Используйте CASCADE, чтобы
также удалить эти зависимости:
CREATE USER MAPPING
Используйте CREATE USER MAPPING, чтобы сопоставить пользователя PostgreSQL с пользователем ClickHouse. Например, чтобы сопоставить текущего пользователя PostgreSQL с удалённым пользователем ClickHouse при подключении к внешнему серверу taxi_srv:
Поддерживаемые параметры:
user: Имя пользователя ClickHouse. Значение по умолчанию — "default".password: Пароль пользователя ClickHouse.
ALTER USER MAPPING
Используйте ALTER USER MAPPING, чтобы изменить определение отображения пользователя:
Параметры те же, что и для CREATE USER MAPPING.
DROP USER MAPPING
Используйте DROP USER MAPPING, чтобы удалить отображение пользователя:
IMPORT FOREIGN SCHEMA
Используйте оператор IMPORT FOREIGN SCHEMA, чтобы импортировать все таблицы, определённые в базе данных ClickHouse как внешние таблицы в схему PostgreSQL:
Используйте LIMIT TO, чтобы выполнять импорт только для определённых таблиц:
Используйте EXCEPT, чтобы исключить таблицы:
pg_clickhouse получит список всех таблиц в указанной базе данных ClickHouse («demo» в приведённых выше примерах), извлечёт определения столбцов для каждой из них и выполнит команды CREATE FOREIGN TABLE для создания внешних таблиц. Столбцы будут определены с использованием поддерживаемых типов данных и, где это можно обнаружить, параметров, поддерживаемых CREATE FOREIGN TABLE.
CREATE FOREIGN TABLE
Используйте IMPORT FOREIGN SCHEMA, чтобы создать внешнюю таблицу, которая позволяет выполнять запросы к данным в базе данных ClickHouse:
Поддерживаемые параметры таблицы:
database: Имя удалённой базы данных. По умолчанию используется база данных, определённая для внешнего сервера.table_name: Имя удалённой таблицы. По умолчанию используется имя, указанное для внешней таблицы.engine: [Движок таблицы], используемый таблицей ClickHouse. ДляCollapsingMergeTree()иAggregatingMergeTree()pg_clickhouse автоматически применяет параметры к функциональным выражениям, выполняемым над таблицей.
Используйте тип данных, соответствующий удалённому типу данных ClickHouse каждого столбца. Для столбцов типа AggregateFunction Type и SimpleAggregateFunction Type сопоставьте тип данных с типом ClickHouse, передаваемым функции, и укажите имя агрегатной функции через соответствующий параметр столбца:
AggregateFunction: Имя агрегатной функции, применяемой к столбцу типа AggregateFunction TypeSimpleAggregateFunction: Имя агрегатной функции, применяемой к столбцу типа SimpleAggregateFunction Type
Пример:
(aggregatefunction 'sum')
Для столбцов типа AggregateFunction pg_clickhouse автоматически добавит Merge к агрегатной функции, вычисляющей значение столбца.
ALTER FOREIGN TABLE
Используйте оператор [ALTER FOREIGN TABLE], чтобы изменить определение внешней таблицы:
Поддерживаемые параметры таблиц и столбцов совпадают с параметрами для [CREATE FOREIGN TABLE].
DROP FOREIGN TABLE
Используйте [DROP FOREIGN TABLE], чтобы удалить внешнюю таблицу:
Эта команда завершится с ошибкой, если существуют какие-либо объекты, зависящие от внешней таблицы.
Используйте опцию CASCADE, чтобы удалить и их также:
Справочник функций и операторов
Типы данных
pg_clickhouse сопоставляет следующие типы данных ClickHouse с типами данных PostgreSQL:
| ClickHouse | PostgreSQL | Примечания |
|---|---|---|
| Bool | boolean | |
| Date | date | |
| DateTime | timestamp | |
| Decimal | numeric | |
| Float32 | real | |
| Float64 | double precision | |
| IPv4 | inet | |
| IPv6 | inet | |
| Int16 | smallint | |
| Int32 | integer | |
| Int64 | bigint | |
| Int8 | smallint | |
| JSON | jsonb | Только для HTTP-движка |
| String | text | |
| UInt16 | integer | |
| UInt32 | bigint | |
| UInt64 | bigint | Вызывает ошибку для значений > максимального BIGINT |
| UInt8 | smallint | |
| UUID | uuid |
Функции
Эти функции предоставляют интерфейс для выполнения запросов к базе данных ClickHouse.
clickhouse_raw_query
Подключается к сервису ClickHouse через его HTTP-интерфейс, выполняет один
запрос и отключается. Необязательный второй аргумент задаёт строку подключения,
по умолчанию используется host=localhost port=8123. Поддерживаются следующие
параметры подключения:
host: Хост для подключения; обязательный параметр.port: HTTP-порт для подключения; по умолчанию8123, еслиhostне является хостом ClickHouse Cloud; в противном случае по умолчанию8443.dbname: Имя базы данных, к которой требуется подключиться.username: Имя пользователя, под которым выполняется подключение; по умолчаниюdefault.password: Пароль, используемый для аутентификации; по умолчанию пароль отсутствует.
Полезно для запросов, которые не возвращают записей; результаты запросов, которые возвращают значения, будут возвращены как одно текстовое значение:
Функции pushdown
Все встроенные функции PostgreSQL, используемые в условных выражениях (в конструкциях HAVING и WHERE) при выполнении запросов к внешним таблицам ClickHouse, автоматически передаются на исполнение (pushdown) в ClickHouse с теми же именами и сигнатурами. Однако у некоторых функции имена или сигнатуры отличаются, и их необходимо сопоставить с эквивалентами. pg_clickhouse сопоставляет следующие функции:
date_part:date_part('day'): toDayOfMonthdate_part('doy'): toDayOfYeardate_part('dow'): toDayOfWeekdate_part('year'): toYeardate_part('month'): toMonthdate_part('hour'): toHourdate_part('minute'): toMinutedate_part('second'): toSeconddate_part('quarter'): toQuarterdate_part('isoyear'): toISOYeardate_part('week'): toISOYeardate_part('epoch'): toISOYear
date_trunc:date_trunc('week'): toMondaydate_trunc('second'): toStartOfSeconddate_trunc('minute'): toStartOfMinutedate_trunc('hour'): toStartOfHourdate_trunc('day'): toStartOfDaydate_trunc('month'): toStartOfMonthdate_trunc('quarter'): toStartOfQuarterdate_trunc('year'): toStartOfYear
array_position: indexOfbtrim: trimBothstrpos: positionregexp_like: match
Пользовательские функции
Эти пользовательские функции, созданные pg_clickhouse, обеспечивают pushdown удалённых запросов (foreign query pushdown) для некоторых функций ClickHouse, не имеющих эквивалентов в PostgreSQL. Если какую-либо из этих функций нельзя протолкнуть (push down), будет возбуждено исключение.
Проталкивание приведений типов
pg_clickhouse проталкивает приведения типов, такие как CAST(x AS bigint), для совместимых
типов данных. Для несовместимых типов проталкивание завершится ошибкой; если x в этом
примере имеет тип ClickHouse UInt64, ClickHouse откажется приводить это значение.
Чтобы проталкивать приведения к несовместимым типам данных, pg_clickhouse предоставляет следующие функции. Они вызывают исключение в PostgreSQL, если приведение не было протолкнуто.
Агрегаты с pushdown
Эти агрегатные функции PostgreSQL могут быть протолкнуты для выполнения в ClickHouse (pushdown).
Пользовательские агрегатные функции
Эти пользовательские агрегатные функции, созданные pg_clickhouse, поддерживают foreign query pushdown для ряда агрегатных функций ClickHouse, не имеющих эквивалентов в PostgreSQL. Если для какой-либо из этих функций pushdown невозможен, будет сгенерировано исключение.
Pushdown агрегатных функций Ordered Set
Эти ordered-set aggregate functions отображаются на ClickHouse Parametric
aggregate functions, при этом их direct argument передаётся как параметр, а выражения ORDER BY — как аргументы. Например, такой PostgreSQL-запрос:
Соответствует следующему запросу ClickHouse:
Обратите внимание, что суффиксы ORDER BY DESC и NULLS FIRST, отличные от значения по умолчанию,
не поддерживаются и вызовут ошибку.
percentile_cont(double): quantilequantile(double): quantilequantileExact(double): quantileExact
Настройки сессии
Установите параметр времени выполнения pg_clickhouse.session_settings, чтобы задать
[настройки ClickHouse], которые будут применяться к последующим запросам. Пример:
Значение по умолчанию — join_use_nulls 1. Установите пустую строку, чтобы использовать настройки, заданные на сервере ClickHouse.
Синтаксис представляет собой список пар ключ-значение, разделённых запятыми и отделённых одним или несколькими пробелами. Ключи должны соответствовать ClickHouse settings. Экранируйте пробелы, запятые и обратные косые черты в значениях с помощью обратной косой черты:
Или используйте значения в одинарных кавычках, чтобы избежать экранирования пробелов и запятых; рассмотрите вариант использования dollar quoting, чтобы не приходилось обрамлять значения двойными кавычками:
Если для вас важна читаемость и нужно задать много параметров, используйте несколько строк, например:
pg_clickhouse не проверяет настройки, а передаёт их в ClickHouse для каждого запроса. Таким образом, он поддерживает все настройки для каждой версии ClickHouse.
Обратите внимание, что pg_clickhouse должен быть загружен до установки
pg_clickhouse.session_settings: либо используйте library preloading, либо просто
обратитесь к одному из объектов расширения, чтобы гарантировать его загрузку.
Авторы
Авторские права
-
Copyright (c) 2025, ClickHouse
-
Отдельные части Copyright (c) 2023-2025, Ildus Kurbangaliev
-
Отдельные части Copyright (c) 2019-2023, Adjust GmbH
-
Отдельные части Copyright (c) 2012-2019, PostgreSQL Global Development Group