2010-06-16 8 views
2

J'ai une fonction de déclenchement que je veux seulement déclencher sur certaines instances d'INSERTS, dans ce cas, if do_backup = true. S'il se déclenche dans tous les cas, j'obtiens une boucle infinie. La logique me semble assez simple, et le reste de la fonction fonctionne. Mais la fonction trigger ne semble pas enregistrer mon conditionnel et s'exécute toujours, même lorsque backup = true.Comment puis-je utiliser "IF instructions" dans un déclencheur postgres

CREATE OR REPLACE FUNCTION table_styles_backup() RETURNS 
TRIGGER AS $table_styles_backup$ 

DECLARE 
... 
do_backup boolean; 

    BEGIN 
SELECT backup INTO do_backup FROM table_details WHERE id=NEW.table_meta_id; 

     IF (do_backup = true) THEN 

    ... 


      INSERT INTO table_styles_versions 
    (
    ... 
    ) 

    VALUES (
    ... 
    ); 
END IF; 

    RETURN NULL; 

    END; 

$table_styles_backup$ LANGUAGE plpgsql; 

CREATE TRIGGER table_styles_backup AFTER INSERT ON table_styles 

FOR EACH ROW EXECUTE PROCEDURE table_styles_backup(); 

Répondre

2

Per the documentation, vous n'avez pas besoin de tester explicitement les types de données booléens dans une instruction IF - ils par défaut pour tester pour être vrai si vous pouvez utiliser:

IF do_backup THEN 
    ... 
    INSERT INTO table_styles_versions (... 
ELSE 
    -- omit this & the ELSE keyword if nothing needs to happen if do_backup is false 
END IF; 
+0

qui semble faire l'affaire , Merci! –