SELECT e INSERT em dados armazenados em um servidor PostgreSQL remoto.
Atualmente, apenas as versões 12 ou superiores do PostgreSQL são compatíveis com o motor de tabela.
Criando uma tabela
- Os nomes das colunas devem ser os mesmos da tabela PostgreSQL original, mas você pode usar apenas algumas delas e em qualquer ordem.
- Os tipos das colunas podem ser diferentes dos da tabela PostgreSQL original. O ClickHouse tenta converter os valores para os tipos de dados do ClickHouse.
- A configuração external_table_functions_use_nulls define como tratar colunas Nullable. Valor padrão: 1. Se for 0, a função de tabela não cria colunas Nullable e insere valores padrão em vez de valores nulos. Isso também se aplica a valores NULL dentro de arrays.
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.schema— Esquema de tabela não padrão. Opcional.on_conflict— Estratégia de resolução de conflitos. Exemplo:ON CONFLICT DO NOTHING. Opcional. Observação: adicionar esta opção tornará a inserção menos eficiente.
Detalhes de implementação
SELECT no PostgreSQL são executadas como COPY (SELECT ...) TO STDOUT dentro de uma transação PostgreSQL somente leitura, com commit após cada consulta SELECT.
Cláusulas WHERE simples, como =, !=, >, >=, <, <= e IN, são executadas no servidor PostgreSQL.
Todas as junções, agregações, ordenações, condições IN [ array ] e a restrição de amostragem LIMIT são executadas no ClickHouse somente após a conclusão da consulta ao PostgreSQL.
As consultas INSERT no PostgreSQL são executadas como COPY "table_name" (field1, field2, ... fieldN) FROM STDIN dentro de uma transação PostgreSQL, com commit automático após cada instrução INSERT.
Os tipos Array do PostgreSQL são convertidos em arrays do ClickHouse.
Atenção: no PostgreSQL, um dado de array, criado como
type_name[], pode conter arrays multidimensionais com números diferentes de dimensões em diferentes linhas da mesma coluna da tabela. Já no ClickHouse, só é permitido ter arrays multidimensionais com a mesma quantidade de dimensões em todas as linhas da mesma coluna da tabela.|. Por exemplo:
0.
No exemplo abaixo, a réplica example01-1 tem a maior prioridade: