Табличная функция PostgreSQL
Позволяет выполнять запросы SELECT и INSERT к данным, которые хранятся на удалённом сервере PostgreSQL.
Синтаксис
Аргументы
| Аргумент | Описание |
|---|---|
host:port | Адрес сервера PostgreSQL. |
database | Имя удалённой базы данных. |
table | Имя удалённой таблицы. |
user | Пользователь PostgreSQL. |
password | Пароль пользователя. |
schema | Схема таблицы, отличная от схемы по умолчанию. Необязательно. |
on_conflict | Стратегия разрешения конфликтов. Пример: ON CONFLICT DO NOTHING. Необязательно. |
Аргументы также могут быть переданы с использованием именованных коллекций. В этом случае host и port должны быть указаны отдельно. Такой подход рекомендуется для продакшен-среды.
Возвращаемое значение
Объект таблицы с теми же столбцами, что и исходная таблица PostgreSQL.
В запросе INSERT, чтобы отличить табличную функцию postgresql(...) от имени таблицы со списком имён столбцов, необходимо использовать ключевые слова FUNCTION или TABLE FUNCTION. См. примеры ниже.
Детали реализации
Запросы SELECT на стороне PostgreSQL выполняются в виде COPY (SELECT ...) TO STDOUT внутри транзакции PostgreSQL только для чтения с фиксацией (commit) после каждого запроса SELECT.
Простые выражения WHERE, такие как =, !=, >, >=, <, <= и IN, выполняются на сервере PostgreSQL.
Все операции JOIN, агрегации, сортировка, условия IN [ array ] и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к PostgreSQL.
Запросы INSERT на стороне PostgreSQL выполняются в виде COPY "table_name" (field1, field2, ... fieldN) FROM STDIN внутри транзакции PostgreSQL в режиме автокоммита после каждого оператора INSERT.
Типы Array в PostgreSQL преобразуются в массивы ClickHouse.
Будьте осторожны: в PostgreSQL столбец с типом данных массив, например Integer[], может содержать массивы разной размерности в разных строках, но в ClickHouse допускаются только многомерные массивы одной и той же размерности во всех строках.
Поддерживаются несколько реплик, которые должны быть перечислены через |. Например:
или
Поддерживаются приоритеты реплик для источника словаря PostgreSQL. Чем больше число в отображении, тем ниже приоритет. Наивысший приоритет — 0.
Примеры
Таблица в PostgreSQL:
Выбор данных из ClickHouse с использованием простых аргументов:
Или используя именованные коллекции:
Вставка:
Использование нестандартной схемы:
Связанные материалы
Репликация или миграция данных Postgres с помощью PeerDB
В дополнение к табличным функциям вы всегда можете использовать PeerDB от ClickHouse для настройки непрерывного конвейера передачи данных из Postgres в ClickHouse. PeerDB — это специализированный инструмент, разработанный для репликации данных из Postgres в ClickHouse с использованием фиксации изменений данных (CDC).