2010-06-29 10 views
11

Si configuro un disparador DESPUÉS en PostgreSQL para disparar después de una inserción/actualización, ¿tendrá que esperar el software de llamada para que el disparador finalice antes de devolver el control al software de llamada? ¿O el disparador se ejecutará por sí mismo detrás de las escenas?¿Después de un disparador en Postgres se bloqueará una inserción/actualización?

+4

Si necesita algo para terminar "entre bastidores" su disparador podría utilizar dblink_send_query http://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html enviar una solicitud asíncrona en su desencadenador, según sus requisitos. – rfusca

Respuesta

13

Sí, porque se ejecuta dentro de la misma transacción. Si el desencadenador falla, la inserción/actualización también fallará. Haga una prueba ejecutando una consulta que fallará (SELECCIONE una tabla que no existe) y podrá ver cómo funcionan las cosas y cómo se comportará su aplicación.

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

¿hay alguna manera de evitar esto? Lo que significa que la operación de inserción/actualización no debería fallar incluso si falla el desencadenador. – Zoran777

Cuestiones relacionadas