Risposte per numero:
-
No; se
S2
non riesce, l'intera transazione viene interrotta e può essere solo annullata. -
Probabilmente c'è un malinteso. L'istruzione SQL
BEGIN
che avvia una transazione è qualcosa di completamente diverso daBEGIN
che avvia un blocco PL/pgSQL. Quest'ultimo non avviare una transazione.Se non esiste un comando SQL esplicito
BEGIN
, ogni istruzione viene eseguita nella propria transazione ("autocommit").Tutte le istruzioni in una funzione vengono eseguite in un'unica transazione.
-
Non puoi avere
COMMIT
(oROLLBACK
) in una funzione. -
Sì. Questa è la stessa domanda della 1., solo negativa.