pg_clickhouse
Введение
pg_clickhouse — это расширение PostgreSQL с открытым исходным кодом, позволяющее выполнять аналитические запросы в ClickHouse прямо из PostgreSQL без переписывания SQL. Оно поддерживает PostgreSQL 13 и выше и ClickHouse v23 и выше.
Когда ClickPipes начинает синхронизировать данные с ClickHouse, используйте pg_clickhouse, чтобы быстро import foreign tables в схему PostgreSQL. Затем запускайте существующие запросы PostgreSQL к этим таблицам, сохраняя текущую кодовую базу и при этом передавая выполнение запросов в ClickHouse.
Первые шаги
Самый простой способ опробовать pg_clickhouse — использовать Docker image, который представляет собой стандартный Docker-образ PostgreSQL с расширением pg_clickhouse:
См. [руководство], чтобы начать импортировать таблицы ClickHouse и выполнять запросы на стороне ClickHouse.
Тестовый пример: TPC-H
В этой таблице сравнивается производительность запросов TPC-H между обычными таблицами PostgreSQL и pg_clickhouse, подключённым к ClickHouse; обе загружены с коэффициентом масштабирования 1. ✔︎ обозначает полный pushdown, тире — отмену запроса по истечении 1 минуты. Все тесты выполнялись на MacBook Pro M4 Max с 36 ГБ памяти.
| Запрос | PostgreSQL | pg_clickhouse | Pushdown |
|---|---|---|---|
| [Query 1] | 4693 ms | 268 ms | ✔︎ |
| [Query 2] | 458 ms | 3446 ms | |
| [Query 3] | 742 ms | 111 ms | ✔︎ |
| [Query 4] | 270 ms | 130 ms | ✔︎ |
| [Query 5] | 337 ms | 1460 ms | ✔︎ |
| [Query 6] | 764 ms | 53 ms | ✔︎ |
| [Query 7] | 619 ms | 96 ms | ✔︎ |
| [Query 8] | 342 ms | 156 ms | ✔︎ |
| [Query 9] | 3094 ms | 298 ms | ✔︎ |
| [Query 10] | 581 ms | 197 ms | ✔︎ |
| [Query 11] | 212 ms | 24 ms | ✔︎ |
| [Query 12] | 1116 ms | 84 ms | ✔︎ |
| [Query 13] | 958 ms | 1368 ms | |
| [Query 14] | 181 ms | 73 ms | ✔︎ |
| [Query 15] | 1118 ms | 557 ms | |
| [Query 16] | 497 ms | 1714 ms | |
| [Query 17] | 1846 ms | 32709 ms | |
| [Query 18] | 5823 ms | 10649 ms | |
| [Query 19] | 53 ms | 206 ms | ✔︎ |
| [Query 20] | 421 ms | - | |
| [Query 21] | 1349 ms | 4434 ms | |
| [Query 22] | 258 ms | 1415 ms |
Сборка из исходного кода
Прочие Unix-системы
Пакеты разработки для PostgreSQL и curl включают pg_config и
curl-config в PATH, поэтому вы можете просто выполнить make (или
gmake), затем make install, а затем выполнить в вашей базе данных команду CREATE EXTENSION pg_clickhouse.
Debian / Ubuntu / APT
Подробности см. в разделе PostgreSQL Apt, описывающем использование репозитория PostgreSQL Apt.
RedHat / CentOS / Yum
Подробности о получении пакетов из репозитория PostgreSQL Yum см. в разделе PostgreSQL Yum.
Установка из PGXN
После установки всех перечисленных выше зависимостей используйте PGXN client (доступен в виде пакетов Homebrew, Apt и Yum с именем pgxnclient), чтобы загрузить, скомпилировать
и установить pg_clickhouse:
Сборка и установка
Чтобы собрать и установить библиотеку ClickHouse и pg_clickhouse, выполните следующую команду:
Если на вашем хосте установлено несколько версий PostgreSQL, вам может понадобиться указать
нужную версию pg_config:
Если утилита curl-config отсутствует в PATH на хосте, вы можете явно указать к ней путь:
Если вы столкнетесь с такой ошибкой, как:
Вам нужно использовать GNU make, который может быть установлен на вашей системе как
gmake:
Если вы получите ошибку вроде следующей:
Убедитесь, что pg_config установлен и находится в вашем PATH. Если вы устанавливали PostgreSQL с помощью
системы управления пакетами, такой как RPM, убедитесь, что пакет
-devel также установлен. При необходимости укажите процессу сборки, где найти pg_config:
Чтобы установить расширение в пользовательский префикс в PostgreSQL 18 или более поздней версии, передайте
аргумент prefix команде install (но не другим целям make):
Затем убедитесь, что префикс указан в следующих параметрах файла [postgresql.conf]:
Тестирование
После установки расширения для запуска набора тестов выполните
Если вы столкнётесь с ошибкой, например:
Нужно запустить набор тестов от имени суперпользователя, например, стандартного суперпользователя по умолчанию "postgres":
Загрузка
После установки pg_clickhouse вы можете добавить его в базу данных, подключившись с правами суперпользователя и выполнив следующую команду:
Если вы хотите установить pg_clickhouse и все его вспомогательные объекты в
определённую схему, используйте предложение SCHEMA, чтобы указать эту схему следующим образом:
Зависимости
Для работы расширения pg_clickhouse требуются PostgreSQL 13 или новее, libcurl,
libuuid. Для сборки расширения необходимы компилятор C и C++, libSSL, GNU
make и CMake.
Дорожная карта
Наш главный приоритет — завершить покрытие pushdown-оптимизаций для аналитических нагрузок, прежде чем добавлять функции DML. Наша дорожная карта:
- Добиться оптимального планирования для оставшихся 10 запросов TPC-H, для которых ещё не выполняется pushdown
- Протестировать и исправить pushdown для запросов ClickBench
- Обеспечить прозрачный pushdown всех агрегатных функций PostgreSQL
- Обеспечить прозрачный pushdown всех функций PostgreSQL
- Разрешить задание параметров ClickHouse на уровне сервера и сессии с помощью CREATE SERVER и GUC
- Поддержать все типы данных ClickHouse
- Поддержать операции легковесного DELETE и UPDATE
- Поддержать пакетную вставку через COPY
- Добавить функцию для выполнения произвольного запроса ClickHouse и возврата его результатов в виде таблицы
- Добавить поддержку pushdown для запросов с UNION, когда все они обращаются к удалённой базе данных
Авторы
Авторские права
- Copyright (c) 2025-2026, ClickHouse
- Отдельные части — Copyright (c) 2023-2025, Ildus Kurbangaliev
- Отдельные части — Copyright (c) 2019-2023, Adjust GmbH
- Отдельные части — Copyright (c) 2012-2019, PostgreSQL Global Development Group
[Запрос 1] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/1.sql [Запрос 2] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/2.sql [Запрос 3] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/3.sql [Запрос 4] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/4.sql [Запрос 5] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/5.sql [Запрос 6] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/6.sql [Запрос 7] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/7.sql [Запрос 8] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/8.sql [Запрос 9] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/9.sql [Запрос 10] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/10.sql [Запрос 11] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/11.sql [Запрос 12] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/12.sql [Запрос 13] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/13.sql [Запрос 14] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/14.sql [Запрос 15] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/15.sql [Запрос 16] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/16.sql [Запрос 17] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/17.sql [Запрос 18] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/18.sql [Запрос 19] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/19.sql [Запрос 20] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/20.sql [Запрос 21] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/21.sql [Запрос 22] https://github.com/ClickHouse/pg_clickhouse/blob/main/dev/tpch/queries/22.sql