Desencadenador: mover filas eliminadas a la tabla de archivo


18

Tengo una pequeña tabla (~ 10 filas) llamada restrictionsen mi base de datos PostgreSQL, donde los valores se eliminan e insertan a diario.

Me gustaría tener una tabla llamada restrictions_deleted, donde cada fila que se elimina restrictionsse almacenará automáticamente. Como restrictionstiene una identificación en serie, no habrá duplicados.

¿Cómo escribo tal desencadenante en PostgreSQL?

Respuestas:


16

Solo necesita mover los datos antiguos a la restrictions_deletedtabla antes de que se eliminen. Esto se hace con el OLDtipo de datos. Puede usar una INSERTinstrucción regular y usar los OLDvalores como valores a insertar.

CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions 
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();


CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
    BEGIN
       INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
       RETURN OLD;
    END;
$$ LANGUAGE plpgsql;

2
Puede reemplazar la lista explícita de valores de columna con algo comoVALUES((OLD).*)
KayEss

1
Funciona bien, pero create functiondebe llamarse antes create trigger. Y el VALUES((OLD).*)truco sugerido por KayEss es bueno.
mivk

8

Si está abierto a un enfoque diferente, ¿Ha considerado agregar un indicador booleano 'eliminado' a la tabla o una marca de tiempo 'deleted_at' en su lugar?

O mejor aún, niegue el acceso CRUD a las tablas de su base de datos y maneje el seguimiento de auditoría en su API transaccional :)


+1 Gracias, no funcionaría para mi caso, pero es un buen enfoque que usa una sola tabla.
Adam Matan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.