ClickHouse/docs/ru/engines/database-engines/postgresql.md

5.7 KiB
Raw Blame History

toc_priority toc_title
35 PostgreSQL

PostgreSQL

Позволяет подключаться к БД на удаленном сервере PostgreSQL. Поддерживает операции чтения и записи (запросы SELECT и INSERT) для обмена данными между ClickHouse и PostgreSQL.

Позволяет в реальном времени получать от удаленного сервера PostgreSQL информацию о таблицах БД и их структуре с помощью запросов SHOW TABLES и DESCRIBE TABLE.

Поддерживает операции изменения структуры таблиц (ALTER TABLE ... ADD|DROP COLUMN). Если параметр use_table_cache (см. ниже раздел Параметры движка) установлен в значение 1, структура таблицы кешируется, и изменения в структуре не отслеживаются, но будут обновлены, если выполнить команды DETACH и ATTACH.

Создание БД

CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);

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

  • host:port — адрес сервера PostgreSQL.
  • database — имя удаленной БД.
  • user — пользователь PostgreSQL.
  • password — пароль пользователя.
  • schema — схема PostgreSQL.
  • use_table_cache — определяет кеширование структуры таблиц БД. Необязательный параметр. Значение по умолчанию: 0.

Поддерживаемые типы данных

PostgerSQL ClickHouse
DATE Date
TIMESTAMP DateTime
REAL Float32
DOUBLE Float64
DECIMAL, NUMERIC Decimal
SMALLINT Int16
INTEGER Int32
BIGINT Int64
SERIAL UInt32
BIGSERIAL UInt64
TEXT, CHAR String
INTEGER Nullable(Int32)
ARRAY Array

Примеры использования

Обмен данными между БД ClickHouse и сервером PostgreSQL:

CREATE DATABASE test_database
ENGINE = PostgreSQL('postgres1:5432', 'test_database', 'postgres', 'mysecretpassword', 1);
SHOW DATABASES;
┌─name──────────┐
│ default       │
│ test_database │
│ system        │
└───────────────┘
SHOW TABLES FROM test_database;
┌─name───────┐
│ test_table │
└────────────┘

Чтение данных из таблицы PostgreSQL:

SELECT * FROM test_database.test_table;
┌─id─┬─value─┐
│  1 │     2 │
└────┴───────┘

Запись данных в таблицу PostgreSQL:

INSERT INTO test_database.test_table VALUES (3,4);
SELECT * FROM test_database.test_table;
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘

Пусть структура таблицы была изменена в PostgreSQL:

postgre> ALTER TABLE test_table ADD COLUMN data Text

Поскольку при создании БД параметр use_table_cache был установлен в значение 1, структура таблицы в ClickHouse была кеширована и поэтому не изменилась:

DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
└────────┴───────────────────┘

После того как таблицу «отцепили» и затем снова «прицепили», структура обновилась:

DETACH TABLE test_database.test_table;
ATTACH TABLE test_database.test_table;
DESCRIBE TABLE test_database.test_table;
┌─name───┬─type──────────────┐
│ id     │ Nullable(Integer) │
│ value  │ Nullable(Integer) │
│ data   │ Nullable(String)  │
└────────┴───────────────────┘

Оригинальная статья