Auslöser: Verschieben Sie gelöschte Zeilen in die Archivierungstabelle
-
16-10-2019 - |
Frage
Ich habe eine kleine (~ 10 Zeilen) Tabelle genannt restrictions
In meiner PostgreSQL -Datenbank, in der die Werte täglich gelöscht und eingefügt werden.
Ich möchte einen Tisch namens namens restrictions_deleted
, wo jede Reihe, aus der gelöscht wird restrictions
wird automatisch gespeichert. Seit restrictions
Hat eine serielle ID, es wird keine Duplikate geben.
Wie schreibe ich einen solchen Auslöser in PostgreSQL?
Lösung
Sie müssen nur die alten Daten in die verschieben restrictions_deleted
Tabelle, bevor es gelöscht wird. Dies geschieht mit dem OLD
Datentyp. Sie können ein Regulat verwenden INSERT
Anweisung und und verwenden Sie die OLD
Werte als Werte, die nicht ineriert sind.
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;
Andere Tipps
Wenn Sie offen für einen anderen Ansatz sind, haben Sie stattdessen überlegt, ein Boolesche Flag "gelöschtes" boolescher Flag oder einen Zeitstempel "Deleted_at" hinzuzufügen.
Oder noch besser, leugnen Sie den CRUD -Zugriff auf Ihre Datenbanktabellen und bewältigen Sie den Prüfweg in Ihrer Transaktions -API :)