mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
27f489b41f
Скорректировал описание.
85 lines
4.5 KiB
Markdown
85 lines
4.5 KiB
Markdown
---
|
||
toc_priority: 30
|
||
toc_title: MaterializedPostgreSQL
|
||
---
|
||
|
||
# [экспериментальный] MaterializedPostgreSQL {#materialize-postgresql}
|
||
|
||
Создает базу данных ClickHouse с исходным дампом данных таблиц PostgreSQL и запускает процесс репликации, т.е. выполняется применение новых изменений в фоне, как эти изменения происходят в таблице PostgreSQL в удаленной базе данных PostgreSQL.
|
||
|
||
Сервер ClickHouse работает как реплика PostgreSQL. Он читает WAL и выполняет DML запросы. Данные, полученные в результате DDL запросов, не реплицируются, но сами запросы могут быть обработаны (описано ниже).
|
||
|
||
## Создание базы данных {#creating-a-database}
|
||
|
||
``` sql
|
||
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
|
||
ENGINE = MaterializedPostgreSQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
|
||
```
|
||
|
||
**Параметры движка**
|
||
|
||
- `host:port` — адрес сервера PostgreSQL.
|
||
- `database` — имя базы данных на удалённом сервере.
|
||
- `user` — пользователь PostgreSQL.
|
||
- `password` — пароль пользователя.
|
||
|
||
## Настройки {#settings}
|
||
|
||
- [materialized_postgresql_max_block_size](../../operations/settings/settings.md#materialized-postgresql-max-block-size)
|
||
|
||
- [materialized_postgresql_tables_list](../../operations/settings/settings.md#materialized-postgresql-tables-list)
|
||
|
||
- [materialized_postgresql_allow_automatic_update](../../operations/settings/settings.md#materialized-postgresql-allow-automatic-update)
|
||
|
||
``` sql
|
||
CREATE DATABASE database1
|
||
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgres_user', 'postgres_password')
|
||
SETTINGS materialized_postgresql_max_block_size = 65536,
|
||
materialized_postgresql_tables_list = 'table1,table2,table3';
|
||
|
||
SELECT * FROM database1.table1;
|
||
```
|
||
|
||
## Требования {#requirements}
|
||
|
||
1. Настройка [wal_level](https://postgrespro.ru/docs/postgrespro/10/runtime-config-wal) должна иметь значение `logical`, параметр `max_replication_slots` должен быть равен по меньшей мере `2` в конфигурационном файле в PostgreSQL.
|
||
|
||
2. Каждая реплицируемая таблица должна иметь один из следующих [репликационных идентификаторов](https://postgrespro.ru/docs/postgresql/10/sql-altertable#SQL-CREATETABLE-REPLICA-IDENTITY):
|
||
|
||
- первичный ключ (по умолчанию)
|
||
|
||
- индекс
|
||
|
||
``` bash
|
||
postgres# CREATE TABLE postgres_table (a Integer NOT NULL, b Integer, c Integer NOT NULL, d Integer, e Integer NOT NULL);
|
||
postgres# CREATE unique INDEX postgres_table_index on postgres_table(a, c, e);
|
||
postgres# ALTER TABLE postgres_table REPLICA IDENTITY USING INDEX postgres_table_index;
|
||
```
|
||
|
||
Первичный ключ всегда проверяется первым. Если он отсутствует, то проверяется индекс, определенный как replica identity index (репликационный идентификатор).
|
||
Если индекс используется в качестве репликационного идентификатора, то в таблице должен быть только один такой индекс.
|
||
Вы можете проверить, какой тип используется для указанной таблицы, выполнив следующую команду:
|
||
|
||
``` bash
|
||
postgres# SELECT CASE relreplident
|
||
WHEN 'd' THEN 'default'
|
||
WHEN 'n' THEN 'nothing'
|
||
WHEN 'f' THEN 'full'
|
||
WHEN 'i' THEN 'index'
|
||
END AS replica_identity
|
||
FROM pg_class
|
||
WHERE oid = 'postgres_table'::regclass;
|
||
```
|
||
|
||
!!! warning "Предупреждение"
|
||
Репликация **TOAST**-значений не поддерживается. Для типа данных будет использоваться значение по умолчанию.
|
||
|
||
## Пример использования {#example-of-use}
|
||
|
||
``` sql
|
||
CREATE DATABASE postgresql_db
|
||
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgres_user', 'postgres_password');
|
||
|
||
SELECT * FROM postgresql_db.postgres_table;
|
||
```
|