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-значений не поддерживается. Для типа данных будет использоваться значение по умолчанию.