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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top