Trigger: déplacement lignes supprimées à la table archives
-
16-10-2019 - |
Question
J'ai un petit (~ 10 lignes) table appelée restrictions
dans ma base de données PostgreSQL, où les valeurs sont supprimées et insérées sur une base quotidienne.
Je voudrais avoir une table appelée restrictions_deleted
, où chaque ligne qui est supprimé de restrictions
sera automatiquement enregistrée. Depuis restrictions
a une id série, il n'y aura pas de doublons.
Comment puis-je écrire un tel déclencheur dans PostgreSQL?
La solution
Vous avez juste besoin de déplacer les anciennes données dans la table restrictions_deleted
avant qu'il ne soit supprimé. Cela se fait avec le type de données OLD
. Vous pouvez utiliser une instruction INSERT
de regulat et l 'utilisation des valeurs de OLD
comme les valeurs à être insérée.
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;
Autres conseils
Si vous êtes ouvert à une autre approche, avez-vous envisagé d'ajouter un « supprimé » indicateur booléen à la table, ou un horodatage « deleted_at » au lieu.
Ou mieux encore, refuser l'accès à vos CRUD tables de base de données et de gérer la piste d'audit dans votre API transactionnel:)