web-dev-qa-db-fra.com

Déclencheur: déplacez les lignes supprimées vers la table d'archives

J'ai une petite table (~ 10 lignes) appelée restrictions dans ma base de données PostgreSQL, où les valeurs sont supprimées et insérées quotidiennement.

Je voudrais avoir une table appelée restrictions_deleted, où chaque ligne qui est supprimée de restrictions sera stockée automatiquement. Depuis restrictions a une carte d'identité en série, il n'y aura pas de doublons.

Comment puis-je écrire un tel déclencheur dans PostgreSQL?

18
Adam Matan

Vous avez juste besoin de déplacer les anciennes données dans le restrictions_deleted table avant qu'il ne soit supprimé. Ceci est fait avec le OLD Type de données. Vous pouvez utiliser une instruction Régula INSERT et utilisez les valeurs OLD sous forme que les valeurs à insérer sont insérées.

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;
16
DrColossos