ClickHouse/docs/ru/engines/table-engines/integrations/postgresql.md
Slach 831135432f add PostgreSQL engine and table function documentation
Signed-off-by: Slach <bloodjazman@gmail.com>
2021-03-08 03:39:24 +03:00

4.5 KiB
Raw Blame History

toc_priority toc_title
8 PostgreSQL

PosgtreSQL

Движок PostgreSQL позволяет выполнять запросы SELECT над данными, хранящимися на удалённом PostgreSQL сервере.

Создание таблицы

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
) ENGINE = PostgreSQL('host:port', 'database', 'table', 'user', 'password');

Смотрите подробное описание запроса CREATE TABLE.

Структура таблицы может отличаться от исходной структуры таблицы PostgreSQL:

  • Имена столбцов должны быть такими же, как в исходной таблице MySQL, но вы можете использовать только некоторые из этих столбцов и в любом порядке.
  • Типы столбцов могут отличаться от типов в исходной таблице PostgreSQL. ClickHouse пытается приводить values to the ClickHouse data types.

Параметры движка

  • host:port — адрес сервера PostgreSQL.

  • database — Имя базы данных на сервере PostgreSQL.

  • table — Имя таблицы.

  • user — Имя пользователя PostgreSQL.

  • password — Пароль пользователя PostgreSQL.

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:

postgres=# CREATE TABLE "public"."test" (
"int_id" SERIAL,
"int_nullable" INT NULL DEFAULT NULL,
"float" FLOAT NOT NULL,
"str" VARCHAR(100) NOT NULL DEFAULT '',
"float_nullable" FLOAT NULL DEFAULT NULL,
PRIMARY KEY (int_id));

CREATE TABLE

postgres=# insert into test (int_id, str, "float") VALUES (1,'test',2);
INSERT 0 1

postgresql> select * from test;
 int_id | int_nullable | float | str  | float_nullable
--------+--------------+-------+------+----------------
      1 |              |     2 | test |
(1 row)

Таблица в ClickHouse, получение данных из PostgreSQL таблицы созданной выше:

CREATE TABLE default.postgresql_table
(
    `float_nullable` Nullable(Float32),
    `str` String,
    `int_id` Int32
)
ENGINE = PostgreSQL('localhost:5432', 'public', 'test', 'postges_user', 'postgres_password');
SELECT * FROM postgresql_table WHERE str IN ('test') 
┌─float_nullable─┬─str──┬─int_id─┐
│           ᴺᵁᴸᴸ │ test │      1 │
└────────────────┴──────┴────────┘
1 rows in set. Elapsed: 0.019 sec.

Смотри также