Só estou tentando ver se entendi direito :
Por padrão, qualquer erro que ocorra em uma função PL/pgSQL aborta a execução da função e da transação circundante
Tenho um procedimento que faz múltiplas operações de inserção em tabelas diferentes, porém no momento não as transformei em uma transação única. A documentação acima significa que, se ocorrer um erro, todas as operações executadas dentro do procedimento serão revertidas ou preciso capturar exceções e executar a reversão/confirmação manualmente?
Todo o procedimento é executado automaticamente em uma única transação. Exceto, se você executar
COMMIT
, que confirma tudo até agora e inicia uma nova transação.Então, não , você não precisa capturar exceções, a menos que queira. Se ocorrer uma exceção (e não for detectada), toda a transação será revertida automaticamente.
Existem algumas limitações nas quais constelações aninhadas
COMMIT
são permitidas. Leia o manual sobre Gerenciamento de Transações .Certifique-se de saber a diferença entre funções e procedimentos no Postgres: