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