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 внутри транзакции только для чтения с коммитом после каждого запроса SELECT.
Простые условия WHERE, такие как =, !=, >, >=, <, <= и IN, выполняются на сервере PostgreSQL.
Все соединения, агрегации, сортировка, условия IN [ array ] и ограничение выборки LIMIT выполняются в ClickHouse только после завершения запроса к PostgreSQL.
Запросы INSERT на стороне PostgreSQL выполняются как COPY "table_name" (field1, field2, ... fieldN) FROM STDIN внутри транзакции PostgreSQL с автокоммитом после каждого оператора INSERT.
Типы массивов PostgreSQL конвертируются в массивы ClickHouse.
Будьте осторожны: в PostgreSQL колонка типа массив (например, Integer[]) может содержать массивы различных размерностей в разных строках, однако в ClickHouse разрешены только многомерные массивы одинаковой размерности во всех строках.
Поддерживает несколько реплик, которые должны быть перечислены через |. Например:
или
Поддерживает приоритет реплик для источника словаря PostgreSQL. Чем больше число в карте, тем меньше приоритет. Наивысший приоритет — 0.
Примеры
Таблица в PostgreSQL:
Выборка данных из ClickHouse с использованием простых аргументов:
Или с использованием именованных коллекций:
Вставка:
Использование Неподразумеваемой Схемы:
Связанные темы
Репликация или миграция данных Postgres с PeerDB
В дополнение к табличным функциям вы всегда можете использовать PeerDB от ClickHouse для настройки непрерывного конвейера данных из Postgres в ClickHouse. PeerDB — это инструмент, специально предназначенный для репликации данных из Postgres в ClickHouse с использованием технологии захвата изменений данных (CDC).