MaterializedPostgreSQL
Создает таблицу ClickHouse с исходным дампом данных таблицы PostgreSQL и запускает процесс репликации, т.е. выполняется применение новых изменений в фоне, как эти изменения происходят в таблице PostgreSQL в удаленной базе данных PostgreSQL.
Если требуется более одной таблицы, вместо движка таблиц рекомендуется использовать движок баз данных MaterializedPostgreSQL и с помощью настройки materialized_postgresql_tables_list указывать таблицы, которые нужно реплицировать. Это будет намного лучше с точки зрения нагрузки на процессор, уменьшит количество подключений и количество слотов репликации внутри удаленной базы данных PostgreSQL.
Создание таблицы
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
Параметры движка
- host:port— адрес сервера PostgreSQL.
- database— имя базы данных на удалённом сервере.
- table— имя таблицы на удалённом сервере.
- user— пользователь PostgreSQL.
- password— пароль пользователя.
Требования
- 
Настройка wal_level должна иметь значение logical, параметрmax_replication_slotsдолжен быть равен по меньшей мере2в конфигурационном файле в PostgreSQL.
- 
Таблица, созданная с помощью движка MaterializedPostgreSQL, должна иметь первичный ключ — такой же, как replica identity index (по умолчанию: первичный ключ) таблицы PostgreSQL (смотрите replica identity index).
- 
Допускается только база данных Atomic. 
Виртуальные столбцы
- _version— счетчик транзакций. Тип: UInt64.
- _sign— метка удаления. Тип: Int8. Возможные значения:- 1— строка не удалена,
- -1— строка удалена.
 
Эти столбцы не нужно добавлять при создании таблицы. Они всегда доступны в SELECT запросе.
Столбец _version равен позиции LSN в WAL, поэтому его можно использовать для проверки актуальности репликации.
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
SELECT key, value, _version FROM postgresql_db.postgresql_replica;
Репликация TOAST-значений не поддерживается. Для типа данных будет использоваться значение по умолчанию.