El activador de auditoría de Postgres solo se activa con una fila ACTUALIZAR
-
20-12-2019 - |
Pregunta
Hola, estoy preparado para desarrollar un activador de auditoría simple para el servidor PostgreSQL.De acuerdo a esto documento, Entiendo bastante bien cómo funciona.Pero quiero registrar mi actividad solo cuando se actualice una fila determinada.A continuación se muestra el código del enlace.Y registra cuando hay una actualización sin importar qué fila se actualice.
IF (TG_OP = 'UPDATE') THEN
...
Por favor ayúdenme a dar una condición al código anterior.¡Gracias!
Solución
El disparador está escrito en PL/PgSQL.Le recomiendo encarecidamente que estudie el Manual de PL/PgSQL si vas a modificar el código PL/PgSQL.
En los disparadores, los datos de la fila están en OLD
y NEW
(para UPDATE
desencadenantes).entonces puedes hacer IF
pruebas sobre eso como cualquier otra cosa.P.ej.:
IF (TG_OP = 'UPDATE') THEN
IF NEW."name" = 'name_to_audit' OR OLD."name" = 'name_to_audit' THEN
-- do audit commands
END IF;
END IF;
Ambos NEW
y OLD
se prueban en caso de que el nombre se cambie del/al nombre de interés.
En este caso, podría cambiarlo para usar un WHEN
cláusula sobre el CREATE TRIGGER
, por lo que nunca activará el disparador a menos que se cumplan las condiciones para auditar.Ver el WHEN
cláusula sobre desencadenantes.
Este es sólo un problema básico de programación;Necesitarás aprender el lenguaje de programación para poder utilizarlo.
Ver también el disparador actualizado para la página 9.1.
Ah, y recuerda pensar en NULL
;recordar NULL = 'anything'
es NULL
.Usar IS DISTINCT FROM
si quieres decir "estas cosas son iguales o ambas son nulas".
Otros consejos
de PostgreSQL Docs:
CREATE TRIGGER log_update
AFTER UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE PROCEDURE log_account_update();
Este solo trabajo para actualizar en esa tabla.Para insertar y eliminar, puede usar el mismo sin donde la consulta.Espero que esto ayude a los demás.