Replicação PostgreSQL para Clickhouse

Objetivo

Documentar passo a passo para realizar a replicação de um banco em PostgreSQl para Clickhouse.

Dependências

[1] PostgresSQL, 16.0-1, Sistema de Gerênciamento de Banco de Dados
[2] Clickhouse, v24.1.5.6-stable, Sistema de Gerênciamento de Banco de Dados colunar

Observações

É obrigatório que todas as tabelas do banco em postgres possuam identificador primário; caso contrário o Clickhouse não será capaz de replicar as tabelas, as ignorando.

Postgres config

Altere as configurações em postgresql.conf conforme seguinte para replicações (OBS: é necessário reiniciar o postgres para que essas alterações tenham efeito):

listen_addresses = '*'
max_replication_slots = 10
wal_level = logical

Usuário de replicação

Crie um usuário no banco postgres para que o clickhouse possa realizar cópias:

CREATE ROLE clickhouse_user SUPERUSER LOGIN PASSWORD 'ClickHouse_123';

Permissao de acesso

Adicione ao arquivo de permissão pg_hba.conf para que o usuário de replicação possa acessar e recarregue as configurações:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    db1             clickhouse_user 192.168.1.0/24          password

Replicar banco

Acesse o client do clickhouse com clickhouse-client.

Permitir materialized postgres

Devido a replicação de postgres a clickhouse ainda estar em testes, é necessário setar a permissão com:

SET allow_experimental_database_materialized_postgresql=1

Finalmente é possivel realizar a cópia e replicação do banco de postgres para clickhouse com:

CREATE DATABASE db1_postgres
ENGINE = MaterializedPostgreSQL('<postgres_host>:5432', '<db_name>', 'clickhouse_user', 'ClickHouse_123') SETTINGS materialized_postgresql_schema = 'public';