2010-06-29 16 views
11

Se imposto un trigger AFTER in PostgreSQL per l'attivazione dopo un inserimento/aggiornamento, il software di chiamata deve attendere il completamento del trigger prima di restituire il controllo al software di chiamata? O il grilletto funzionerà da solo dietro le quinte?Un trigger AFTER in Postgres blocca un inserimento/aggiornamento?

+4

Se avete bisogno di qualcosa per finire "dietro le quinte" il trigger potrebbe usare dblink_send_query http://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html per inviare un richiesta asincrona nel trigger - a seconda delle esigenze. – rfusca

risposta

13

Sì, perché è eseguito all'interno della stessa transazione. Se il trigger fallisce, anche l'inserimento/aggiornamento fallirà. Basta fare un test eseguendo una query che fallirà (SELEZIONA una tabella che non esiste) e puoi vedere come funzionano le cose e come si comporterà la tua applicazione.

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

c'è un modo per evitarlo? Ciò significa che l'operazione di inserimento/aggiornamento non dovrebbe fallire anche se il trigger fallisce. – Zoran777

Problemi correlati