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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top