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:
См. также