Svar efter nummer:
-
Nej; om
S2misslyckas, avbryts hela transaktionen och kan bara återställas. -
Det finns förmodligen ett missförstånd. SQL-satsen
BEGINsom startar en transaktion är något helt annat änBEGINsom 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.