Respostas por número:
-
Não; seS2
falha, toda a transação é abortada e só pode ser revertida.
-
Provavelmente há um mal-entendido. A instrução SQLBEGIN
que inicia uma transação é algo bem diferente doBEGIN
que inicia um bloco PL/pgSQL. Este último não iniciar uma transação.
Se não houver comando SQL explícitoBEGIN
, cada instrução é executada em sua própria transação (“autocommit”).
Todas as instruções em uma função são executadas em uma única transação.
-
Você não pode terCOMMIT
(ouROLLBACK
) em uma função.
-
Sim. Esta é a mesma pergunta que 1., apenas na negativa.