Tablas de Transición
Las tablas de transición exponen NEW TABLE y OLD TABLE a los disparadores a nivel de sentencia, proporcionando acceso a OLD/NEW en bloque sin el coste por fila de los disparadores.
Receta
CREATE TRIGGER tr_audit_stmt
AFTER INSERT ON app.accounts
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT EXECUTE FUNCTION app.audit_inserted();Cuándo usar esto: Implementas o revisas SQL que utiliza este concepto en PostgreSQL 18.
Ejemplo de Trabajo
CREATE OR REPLACE FUNCTION app.audit_inserted() RETURNS trigger
LANGUAGE plpgsql AS $$
BEGIN
INSERT INTO app.audit_log (action, cnt)
SELECT 'insert', count(*) FROM inserted;
RETURN NULL;
END;
$$;Lo que esto demuestra:
REFERENCING NEW TABLE AS insertednombra la relación de transición.- El disparador a nivel de sentencia agrega las filas insertadas una sola vez.
- Útil para auditar
COPYeINSERTmasivos.
Análisis Profundo
Sintaxis
- Disponible en disparadores de sentencia
INSERT,UPDATE,DELETE. OLD TABLEenUPDATE/DELETE;NEW TABLEenINSERT/UPDATE.- Las relaciones de transición son temporales, como las tablas de transición de disparadores en el estándar SQL.
Trampas Comunes
- Transacciones largas: Bloquean el
vacuumy aumentan la fragmentación. Solución: Confirma rápidamente; establece tiempos de espera. - Índices faltantes: Escaneos secuenciales bajo carga. Solución: Indexa las columnas de unión y filtro.
- Bloqueos implícitos: Bloqueos inesperados. Solución: Usa
FOR UPDATEexplícito cuando sea necesario. - Suposición incorrecta de aislamiento: Anomalías bajo escrituras concurrentes. Solución: Elige el nivel deliberadamente.
- Migraciones no probadas: Bloqueo de DDL u objetos inválidos. Solución: Prepara las migraciones con datos similares a los de producción.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Lógica a nivel de aplicación | CRUD simple | Integridad distribuida entre servicios |
| Vista materializada | Lecturas repetidas intensivas | Complejidad de actualización |
| Procesador de flujos externo | Eventos entre sistemas | Superficie operativa adicional |
Preguntas Frecuentes
¿Se aplica esto a las réplicas?
Las réplicas de solo lectura ejecutan SELECT; las escrituras van al primario.
¿Qué pasa con PgBouncer?
La agrupación de transacciones afecta a las características a nivel de sesión; usa el modo de sesión cuando sea necesario.
Relacionado
- Conceptos Básicos de Disparadores - temporización
- Disparadores de Auditoría - patrones de auditoría
Versiones de la Pila: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, y PostGIS 3.5+.