postgresql
#PostgreSQL {#postgresql}
Движок PostgreSQL позволяет выполнять запросы SELECT и INSERT для таблиц на удаленном сервере PostgreSQL.
Создание таблицы
Смотрите подробное описание запроса CREATE TABLE.
Структура таблицы может отличаться от структуры исходной таблицы PostgreSQL:
- Имена столбцов должны быть такими же, как в исходной таблице PostgreSQL, но можно использовать только некоторые из этих столбцов и в любом порядке.
- Типы столбцов могут отличаться от типов в исходной таблице PostgreSQL. ClickHouse пытается привести значения к типам данных ClickHouse.
- Настройка external_table_functions_use_nulls определяет как обрабатывать Nullable столбцы. Значение по умолчанию: 1. Если значение 0, то табличная функция не делает Nullable столбцы, а вместо NULL выставляет значения по умолчанию для скалярного типа. Это также применимо для значений NULL внутри массивов.
Параметры движка
- host:port— адрес сервера PostgreSQL.
- database— имя базы данных на сервере PostgreSQL.
- table— имя таблицы.
- user— имя пользователя PostgreSQL.
- password— пароль пользователя PostgreSQL.
- schema— имя схемы, если не используется схема по умолчанию. Необязательный аргумент.
Особенности реализации
Запросы SELECT на стороне PostgreSQL выполняются как COPY (SELECT ...) TO STDOUT внутри транзакции PostgreSQL только на чтение с коммитом после каждого запроса SELECT.
Простые условия для WHERE, такие как =, !=, >, >=, <, <= и IN, исполняются на стороне PostgreSQL сервера.
Все операции объединения, аггрегации, сортировки, условия IN [ array ] и ограничения LIMIT выполняются на стороне ClickHouse только после того, как запрос к PostgreSQL закончился.
Запросы INSERT на стороне PostgreSQL выполняются как COPY "table_name" (field1, field2, ... fieldN) FROM STDIN внутри PostgreSQL транзакции с автоматическим коммитом после каждого запроса INSERT.
PostgreSQL массивы конвертируются в массивы ClickHouse.
Будьте внимательны, в PostgreSQL массивы, созданные как type_name[], являются многомерными и могут содержать в себе разное количество измерений в разных строках одной таблицы. Внутри ClickHouse допустимы только многомерные массивы с одинаковым кол-вом измерений во всех строках таблицы.
Поддерживает несколько реплик, которые должны быть перечислены через |. Например:
При использовании словаря PostgreSQL поддерживается приоритет реплик. Чем больше номер реплики, тем ниже ее приоритет. Наивысший приоритет у реплики с номером 0.
В примере ниже реплика example01-1 имеет более высокий приоритет:
Пример использования
Таблица в PostgreSQL:
Таблица в ClickHouse, получение данных из PostgreSQL таблицы, созданной выше:
Using Non-default Schema:
См. также