Réponses par numéro :
-
Non; si
S2
échoue, toute la transaction est abandonnée et ne peut être annulée. -
Il y a probablement un malentendu. L'instruction SQL
BEGIN
qui démarre une transaction est quelque chose de très différent duBEGIN
qui démarre un bloc PL/pgSQL. Ce dernier ne le fait pas démarrer une transaction.S'il n'y avait pas de commande SQL explicite
BEGIN
, chaque instruction s'exécute dans sa propre transaction ("autocommit").Toutes les instructions d'une fonction sont exécutées en une seule transaction.
-
Vous ne pouvez pas avoir
COMMIT
(ouROLLBACK
) dans une fonction. -
Oui. C'est la même question que 1., seulement dans le négatif.