Skip to main content
Skip to main content

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:

См. также