Respuestas por número:
-
No; si
S2
falla, toda la transacción se aborta y solo se puede revertir. -
Probablemente haya un malentendido. La instrucción SQL
BEGIN
que inicia una transacción es algo bastante diferente delBEGIN
que 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.