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?

War es hilfreich?

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 :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top