Cria uma tabela do ClickHouse com um dump inicial dos dados de uma tabela do PostgreSQL e inicia o processo de replicação; ou seja, executa uma tarefa em segundo plano para aplicar novas alterações à medida que elas ocorrem na tabela do PostgreSQL no banco de dados PostgreSQL remoto.
Se for necessária mais de uma tabela, é altamente recomendável usar o motor de banco de dados MaterializedPostgreSQL em vez do motor de tabela e usar a configuração materialized_postgresql_tables_list, que especifica as tabelas a serem replicadas (também será possível adicionar o schema do banco de dados). Isso será muito melhor em termos de CPU, com menos conexões e menos slots de replicação no banco de dados PostgreSQL remoto.
Criando uma tabela
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;Parâmetros do motor
host:port— Endereço do servidor PostgreSQL.database— Nome do banco de dados remoto.table— Nome da tabela remota.user— Usuário do PostgreSQL.password— Senha do usuário.
TLS/SSL
Os parâmetros TLS/SSL são encaminhados ao libpq e podem ser fornecidos por meio de uma coleção nomeada ou como argumentos chave-valor finais do motor: sslmode (disable, allow, prefer, require, verify-ca ou verify-full; quando não definido, é usado o padrão prefer do libpq), além dos certificados e da chave, em uma de duas formas. sslrootcert (certificado da CA), sslcert (certificado do cliente) e sslkey (chave privada do cliente) são caminhos para arquivos locais do servidor e são aceitos apenas em uma coleção nomeada definida no arquivo de configuração do servidor. Já sslrootcert_pem, sslcert_pem e sslkey_pem aceitam o conteúdo literal do arquivo correspondente, podem ser especificados em SQL e são mascarados em logs e consultas SHOW, como uma senha.
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password',
sslmode = 'verify-full', sslrootcert_pem = '-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----')
PRIMARY KEY key;Os parâmetros de TLS/SSL fazem parte dos parâmetros de conexão do PostgreSQL e são definidos no momento da criação da tabela.
Requisitos
-
A configuração wal_level deve ter o valor
logical, e o parâmetromax_replication_slotsdeve ter valor de pelo menos2no arquivo de configuração do PostgreSQL. -
Uma tabela com o motor
MaterializedPostgreSQLdeve ter uma chave primária — a mesma de um índice de identidade de réplica (por padrão, a chave primária) de uma tabela PostgreSQL (consulte detalhes sobre o índice de identidade de réplica). -
Somente o banco de dados Atomic é permitido.
-
O motor de tabela
MaterializedPostgreSQLfunciona apenas com versões do PostgreSQL >= 11, pois a implementação exige a função do PostgreSQL pg_replication_slot_advance.
Colunas virtuais
-
_version— Contador de transações. Tipo: UInt64. -
_sign— Marca de exclusão. Tipo: Int8. Valores possíveis:1— A linha não foi excluída,-1— A linha foi excluída.
Essas colunas não precisam ser adicionadas quando uma tabela é criada. Elas sempre podem ser acessadas na consulta SELECT.
A coluna _version corresponde à posição de LSN no WAL, portanto pode ser usada para verificar o quão atualizada está a replicação.
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;