PostgreSQL - ¿Las funciones y disparadores se interrumpen de raíz si se cae la BD a la mitad de la ejecución?

 
Vista:
sin imagen de perfil
Val: 23
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

¿Las funciones y disparadores se interrumpen de raíz si se cae la BD a la mitad de la ejecución?

Publicado por Martín (8 intervenciones) el 07/09/2020 21:02:37
Tomemos el siguiente ejemplo:
Mi programa realiza un insert en una tabla de la base de datos (llamémosle tabla 1) y al momento de hacerlo, un Trigger en el postgresql realiza una función de insertar esos datos en otras dos tablas (llamémosle tabla 2 y tabla 3). Ahora , desde el momento que yo hago el insert en la tabla 1, hasta que se ejecuta el trigger y se hacen las inserciones de los datos automáticamente en las tabla 2 y 3, puede suceder que inesperadamente se me caiga la conexión a la base de datos. Entonces mi duda sería si ya viene predeterminado que el postgresql corte toda esa secuencia de acciones desde el principio (es decir, que vuelva todo para atrás y no haga ni el primer insert a la tabla 1), que se corte antes del trigger (que sólo realize la insersión a la tabla 1) o que corte las acciones a partir del momento en que se quedó la conexión (por ejemplo si se cae cuando va a empezar el insert en la tabla 3, las inserciones en la tabla 1 y 2 quedan registradas). Mi pregunta es esa porque me estoy adentrando en el terreno de las transacciones y los rollback, y no sabría si tendría que usarlos en el caso que haya triggers y funciones en general. Espero haber sido lo bastante claro, agradecería mucho si alguien me pudiera responder a esto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

¿Las funciones y disparadores se interrumpen de raíz si se cae la BD a la mitad de la ejecución?

Publicado por Francisco (110 intervenciones) el 07/09/2020 21:28:16
Hola

Por defecto PostgreSQL tiene habilitado un autocommit, pero en tu caso es necesario que las transacciones las ejecutes manualmente ya sea dentro de un trigger o una funcion, si por alguna eventualidad la transaccion ha iniciado y se corta la conexion, PostgreSQL no la dara por valida hasta que ejecute un COMMIT, cualquier otra cosas hara un ROLLBACK hasta el ultimo estado estable.

INFO
https://www.enterprisedb.com/postgres-tutorials/how-work-postgresql-transactions


1
2
3
4
5
6
7
8
9
10
11
BEGIN
 
	INSERT or UPDATE or DELETE;
	COMMIT;
 
EXCEPTION
   WHEN error_type
 
        ROLLBACK;
 
END;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 23
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

¿Las funciones y disparadores se interrumpen de raíz si se cae la BD a la mitad de la ejecución?

Publicado por Martín (8 intervenciones) el 07/09/2020 21:55:31
Muchas gracias Francisco valoro tu respuesta y el documento que has pasado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar