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
BEGINqui démarre une transaction est quelque chose de très différent duBEGINqui 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.