Signed-off-by: Slach <bloodjazman@gmail.com>
4.5 KiB
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.