Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

motor de tabela MaterializedPostgreSQL

Recurso experimental
Sem suporte no ClickHouse Cloud

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

  1. A configuração wal_level deve ter o valor logical, e o parâmetro max_replication_slots deve ter valor de pelo menos 2 no arquivo de configuração do PostgreSQL.

  2. Uma tabela com o motor MaterializedPostgreSQL deve 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).

  3. Somente o banco de dados Atomic é permitido.

  4. O motor de tabela MaterializedPostgreSQL funciona 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;
Navigation