Svar efter nummer:
-
Nej; om
S2
misslyckas, avbryts hela transaktionen och kan bara återställas. -
Det finns förmodligen ett missförstånd. SQL-satsen
BEGIN
som startar en transaktion är något helt annat änBEGIN
som startar ett PL/pgSQL-block. Det senare inte starta en transaktion.Om det inte fanns något explicit SQL-kommando
BEGIN
, varje uttalande körs i sin egen transaktion ("autocommit").Alla satser i en funktion exekveras i en enda transaktion.
-
Du kan inte ha
COMMIT
(ellerROLLBACK
) i en funktion. -
Ja. Detta är samma fråga som 1., bara negativt.