2012-05-23 13 views
6

¿Se activará un disparador AFTER INSERT (función escrita en pl/PGsql) en una transacción diferente a la inserción original?DESPUÉS de INSERTAR desencadenar en una transacción por separado?

Lo que me preocupa es si el desencadenador experimenta una excepción de algún tipo.
¿Se puede revertir el gatillo sin que se vea afectado el inserto original?

+1

¿Se podrá deshacer esa transacción por separado independientemente de la transacción principal? – wildplasser

Respuesta

13

Todos los desencadenantes de PostgreSQL se ejecutan en la misma transacción que la transacción que los desencadenó.

Editar: También puede utilizar LISTEN + NOTIFY para enviar un mensaje desde el gatillo para un código que se ejecuta fuera de la transacción. En ese caso, el mensaje solo se entregará en el momento de una confirmación exitosa. Los errores en los oyentes no revertirán la transacción desencadenante.

6

Los procedimientos de desencadenador se ejecutan en la misma transacción como como eventos desencadenantes asociados. Pero los efectos de un procedimiento desencadenante pueden revertirse por separado.

Tiene que agregar exception handling al disparador posterior.

Cuestiones relacionadas