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)).
| Campo | Para que serve |
|---|---|
| Host / Porta | Servidor PostgreSQL. Padrão 5432 |
| Database | Banco 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 / Senha | Usuário do banco |
| Modo SSL | Desabilitado (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 Name | Identifica 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.