Básicamente nos gustaría crear un GATILLO para cada tabla que queremos que se nos notifique para una operación ACTUALIZAR / INSERTAR / BORRAR. Una vez que se active este disparador, ejecutará una función que simplemente agregará una nueva fila (codificando el evento) a una tabla de registro que luego sondearemos desde un servicio externo.
Ese es un uso bastante estándar para un disparador.
Antes de comenzar con TRIGGER (s) de Postgres, nos gustaría saber cómo se escalan: ¿cuántos disparadores podemos crear en una sola instalación de Postgres?
Si sigue creándolos, eventualmente se quedará sin espacio en disco.
No hay un límite específico para los desencadenantes.
Los límites de PostgreSQL están documentados en la página acerca de .
¿Afectan el rendimiento de la consulta?
Depende del tipo de disparador, el idioma del disparador y lo que hace el disparador.
Un simple BEFORE ... FOR EACH STATEMENT
disparador PL / PgSQL que no hace nada tiene una sobrecarga cercana a cero.
FOR EACH ROW
los disparadores tienen una sobrecarga mayor que los FOR EACH STATEMENT
disparadores. Escalado, obviamente, con los recuentos de filas afectados.
AFTER
los desencadenantes son más caros que los BEFORE
desencadenantes porque deben ponerse en cola hasta que la instrucción termine de hacer su trabajo y luego ejecutarse. No se derraman en el disco si la cola se hace grande (al menos en 9.4 y posteriores, puede cambiar en el futuro), por lo que las AFTER
colas de activación enormes pueden hacer que la memoria disponible se desborde, lo que resulta en la anulación de la instrucción.
Un activador que modifica la NEW
fila antes de insertar / actualizar es más barato que un activador que hace DML.
El caso de uso específico que desee funcionaría mejor con una mejora en progreso que podría convertirse en PostgreSQL 9.5 (si tenemos suerte), donde los FOR EACH STATEMENT
desencadenantes pueden ver tablas OLD
y virtuales NEW
. Esto no es posible en las versiones actuales de PostgreSQL, por lo que debe usar FOR EACH ROW
desencadenantes.
¿Alguien ha intentado esto antes?
Por supuesto. Es un uso bastante estándar para los desencadenantes, junto con auditorías, comprobación de cordura, etc.
Deberá buscar LISTEN
y encontrar NOTIFY
una buena manera de despertar a su trabajador cuando ocurran cambios en la tabla de tareas.
Ya estás haciendo lo más importante al evitar hablar con sistemas externos directamente desde los disparadores. Eso tiende a ser problemático para el rendimiento y la fiabilidad. Las personas a menudo intentan hacer cosas como enviar correo directamente desde un disparador, y esas son malas noticias.