Skip to Content
IntegraçõesPostgreSQL

PostgreSQL

Coleta POSTGRES e Entrega POSTGRES_EXEC. A mesma conexão atende TimescaleDB, que é uma extensão do PostgreSQL — não há tipo separado para ela.

Conexão

Se a extensão TimescaleDB estiver instalada no banco, o Testar Conexão mostra a versão dela junto da versão do servidor (PostgreSQL 16.2 (TimescaleDB 2.17.0)).

CampoPara que serve
Host / PortaServidor PostgreSQL. Padrão 5432
DatabaseBanco aberto na conexão
Schema (search_path)Schema padrão das consultas. Em branco = public. Aceita um nome simples; para alcançar outro schema, qualifique a tabela na própria query
Usuário / SenhaUsuário do banco
Modo SSLDesabilitado (sem TLS), Exigir TLS (cifra sem validar o certificado), Verificar CA (valida a cadeia) ou Verificar CA e hostname
Certificado da CA (PEM)Só nos modos que verificam: cole o certificado da CA que assinou o certificado do servidor. Em branco quando a CA é pública (ex.: RDS)
Application NameIdentifica a sessão do CMS em pg_stat_activity, no banco do cliente. Em branco = CMS
Query de Teste (Keep Alive)Mesma função dos demais. Em branco = SELECT 1

Verificar CA valida a cadeia mas não o nome do servidor — é o modo certo quando o banco é acessado por IP e o certificado foi emitido para o nome DNS, situação comum em rede industrial. Os modos allow/prefer do libpq não foram expostos de propósito: eles caem para texto claro em silêncio, e aqui é melhor que a conexão falhe do que se rebaixe sem ninguém notar.

Cast :: convive com os placeholders

O driver do PostgreSQL só aceita parâmetros posicionais ($1, $2), então o CMS converte os :nome do comando antes de executar. A conversão entende a sintaxe do dialeto: o cast ::tipo não é confundido com placeholder, e :nome dentro de string, de identificador entre aspas, de comentário ou de bloco $$...$$ continua sendo texto, não bind.

INSERT INTO medicoes (ts, dados, planta) VALUES (:datetime::timestamptz, :payload::jsonb, :PLANTA_PADRAO)

Se um :nome não corresponder a nenhum Parâmetro de Entrada, Variável ou valor de mensagem, a execução falha dizendo qual placeholder ficou sem valor — em vez de deixar o banco responder com um erro de sintaxe apontando para outro ponto do comando.

TimescaleDB

Não há configuração específica: escrever numa hypertable é um INSERT comum, e as funções de janela de tempo funcionam na Query SELECT como qualquer outra função.

-- Coleta: média por faixa de 5 minutos na última hora SELECT time_bucket('5 minutes', ts) AS balde, avg(valor) AS media FROM medicoes WHERE ts > now() - interval '1 hour' GROUP BY balde ORDER BY balde; -- Entrega numa hypertable, ignorando duplicata de timestamp INSERT INTO medicoes (ts, valor) VALUES (:datetime, :payload::numeric) ON CONFLICT (ts) DO NOTHING;

A Entrega executa um comando por mensagem. Para ingestão de altíssimo volume, o caminho hoje é agrupar as amostras num payload só (via Transformador) e gravá-las com um INSERT de várias linhas, em vez de uma mensagem por amostra. Escrita em lote nativa (COPY) não está disponível — COPY é bloqueado pelo guard.

Vocabulário bloqueado neste dialeto

Além do DDL/DCL barrado em todos os dialetos, este bloqueia:

COPY, dblink, pg_read_file, pg_write_file, pg_ls_dir, lo_import, lo_export, pg_sleep, pg_terminate_backend

A checagem completa — verbo inicial, statements encadeados e neutralização de comentários e literais — está em o que o CMS bloqueia nos campos SQL.

O comportamento comum aos quatro bancos — modos de resultado, marcação do que já foi lido e placeholders — está em Bancos de dados.