2010-06-29 2 views
11

Si je mets en place un déclencheur AFTER dans PostgreSQL après une insertion/mise à jour, le logiciel appelant devra-t-il attendre que le déclencheur se termine avant de renvoyer le contrôle au logiciel appelant? Ou le déclencheur fonctionnera-t-il seul dans les coulisses?Un déclencheur AFTER dans Postgres bloque-t-il un insert/update?

+4

Si vous avez besoin quelque chose à finir « dans les coulisses » votre déclencheur pourrait utiliser dblink_send_query http://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html pour envoyer un demande asynchrone dans votre déclencheur - en fonction de vos besoins. – rfusca

Répondre

13

Oui, car il est exécuté dans la même transaction. Si le déclencheur échoue, l'insertion/mise à jour échouera également. Faites simplement un test en exécutant une requête qui échouera (SELECT une table qui n'existe pas) et vous pourrez voir comment les choses fonctionnent et comment votre application va se comporter.

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    EXECUTE 'SELECT fail'; 
END; 
$$ 
LANGUAGE plpgsql; 
+0

est-il un moyen d'éviter cela? Cela signifie que l'opération d'insertion/mise à jour ne doit pas échouer même si le déclenchement échoue. – Zoran777

Questions connexes