Skip to Content
IntegracionesPostgreSQL

PostgreSQL

Recolección POSTGRES y Entrega POSTGRES_EXEC. La misma conexión atiende TimescaleDB, que es una extensión de PostgreSQL — no hay un tipo separado para ella.

Conexión

Si la extensión TimescaleDB está instalada en la base, Probar Conexión muestra su versión junto a la del servidor (PostgreSQL 16.2 (TimescaleDB 2.17.0)).

CampoPara qué sirve
Host / PuertoServidor PostgreSQL. Por defecto 5432
DatabaseBase abierta en la conexión
Schema (search_path)Schema predeterminado de las consultas. Vacío = public. Acepta un nombre simple; para alcanzar otro schema, califique la tabla en la propia consulta
Usuario / ContraseñaUsuario de la base
Modo SSLDeshabilitado (sin TLS), Exigir TLS (cifra sin validar el certificado), Verificar CA (valida la cadena) o Verificar CA y hostname
Certificado de la CA (PEM)Solo en los modos que verifican: pegue el certificado de la CA que firmó el certificado del servidor. Vacío cuando la CA es pública (ej.: RDS)
Application NameIdentifica la sesión del CMS en pg_stat_activity, en la base del cliente. Vacío = CMS
Query de Prueba (Keep Alive)Misma función que en los demás. Vacío = SELECT 1

Verificar CA valida la cadena pero no el nombre del servidor — es el modo correcto cuando la base se accede por IP y el certificado fue emitido para el nombre DNS, situación común en red industrial. Los modos allow/prefer de libpq quedaron fuera a propósito: caen a texto plano en silencio, y aquí es mejor que la conexión falle a que se degrade sin que nadie lo note.

El cast :: convive con los marcadores

El driver de PostgreSQL solo acepta parámetros posicionales ($1, $2), así que el CMS convierte los :nombre del comando antes de ejecutar. La conversión entiende la sintaxis del dialecto: el cast ::tipo no se confunde con un marcador, y :nombre dentro de una cadena, de un identificador entre comillas, de un comentario o de un bloque $$...$$ sigue siendo texto, no bind.

INSERT INTO mediciones (ts, datos, planta) VALUES (:datetime::timestamptz, :payload::jsonb, :PLANTA_PREDETERMINADA)

Si un :nombre no corresponde a ningún Parámetro de Entrada, Variable o valor de mensaje, la ejecución falla indicando qué marcador quedó sin valor — en lugar de dejar que la base responda con un error de sintaxis que apunta a otro punto del comando.

TimescaleDB

No hay configuración específica: escribir en una hypertable es un INSERT común, y las funciones de ventana de tiempo funcionan en la Query SELECT como cualquier otra función.

-- Recolección: promedio por franja de 5 minutos en la última hora SELECT time_bucket('5 minutes', ts) AS franja, avg(valor) AS promedio FROM mediciones WHERE ts > now() - interval '1 hour' GROUP BY franja ORDER BY franja; -- Entrega en una hypertable, ignorando timestamp duplicado INSERT INTO mediciones (ts, valor) VALUES (:datetime, :payload::numeric) ON CONFLICT (ts) DO NOTHING;

La Entrega ejecuta un comando por mensaje. Para ingesta de altísimo volumen, hoy el camino es agrupar las muestras en un solo payload (vía Transformador) y grabarlas con un INSERT de varias filas, en vez de un mensaje por muestra. La carga masiva nativa (COPY) no está disponible — COPY está bloqueado por el guard.

Vocabulario bloqueado en este dialecto

Además del DDL/DCL vedado en todos los dialectos, este bloquea:

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

La verificación completa — verbo inicial, statements encadenados y la neutralización de comentarios y literales — está en lo que el CMS bloquea en los campos SQL.

El comportamiento común a las cuatro bases — modos de resultado, marcado de lo ya leído y marcadores — está en Bases de datos.