Respuestas por número:
-
No; si
S2falla, toda la transacción se aborta y solo se puede revertir. -
Probablemente haya un malentendido. La instrucción SQL
BEGINque inicia una transacción es algo bastante diferente delBEGINque inicia un bloque PL/pgSQL. Este último no iniciar una transacción.Si no hubiera un comando SQL explícito
BEGIN, cada instrucción se ejecuta en su propia transacción ("autoconfirmación").Todas las declaraciones en una función se ejecutan en una sola transacción.
-
No puede tener
COMMIT(oROLLBACK) en una función. -
Sí. Esta es la misma pregunta que la 1., solo que en forma negativa.