Справочник по pg_clickhouse
Введение
[pg_clickhouse] — это расширение PostgreSQL с открытым исходным кодом, которое выполняет аналитические запросы в ClickHouse прямо из PostgreSQL без переписывания SQL. Оно поддерживает PostgreSQL 13 и более поздних версий, а также ClickHouse v23 и более поздних версий.
Как только ClickPipes начнёт синхронизировать данные с ClickHouse, используйте pg_clickhouse, чтобы быстро и просто [импортировать внешние таблицы] в схему PostgreSQL. Затем выполняйте существующие запросы PostgreSQL к этим таблицам, сохраняя текущую кодовую базу и передавая выполнение в ClickHouse.
Начало работы
Самый простой способ попробовать pg_clickhouse — воспользоваться [Docker-образ], который содержит стандартный Docker-образ PostgreSQL с расширениями pg_clickhouse и re2:
См. [руководство], чтобы приступить к импорту таблиц 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] (доступен
через Homebrew, Apt и в виде пакетов Yum под именем pgxnclient) для загрузки, компиляции
и установки pg_clickhouse:
Сборка и установка
Чтобы собрать и установить библиотеку ClickHouse и pg_clickhouse, выполните:
Если на вашем хосте установлено несколько версий PostgreSQL, может потребоваться указать
подходящую версию pg_config:
Если curl-config отсутствует в переменной PATH на вашем хосте, можно
явно указать путь:
Если вы столкнулись с такой ошибкой:
Вам нужно использовать GNU make, который вполне может быть установлен в вашей системе под именем
gmake:
Если вы столкнулись с такой ошибкой:
Убедитесь, что pg_config установлен и доступен в переменной PATH. Если вы устанавливали PostgreSQL с помощью системы управления пакетами, например RPM, убедитесь, что пакет -devel тоже установлен. При необходимости укажите процессу сборки, где его найти:
Чтобы установить расширение с пользовательским префиксом в 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, если все они обращаются к удаленной базе данных
Авторы
Авторские права
- Авторские права (c) 2025-2026, ClickHouse
- Авторские права на отдельные части (c) 2023-2025, Ildus Kurbangaliev
- Авторские права на отдельные части (c) 2019-2023, Adjust GmbH
- Авторские права на отдельные части (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