Você pode tentar você mesmo:
AVISO: já existe uma transação em andamento
Não inicia nenhuma (sub) transação nova, pois as transações aninhadas não são implementadas no PostgreSQL. (Você pode fazer alguma mágica em uma pl/pgsql
função, por exemplo, que imita esse comportamento.)
Com o PostgreSQL 11, era possível pensar que os novos procedimentos reais armazenados e sua capacidade de lidar com transações tornariam possíveis transações aninhadas. No entanto, de acordo com a documentação , este não é o caso:
Nos procedimentos invocados pelo CALL
comando, bem como nos blocos de códigos anônimos ( DO
comando), é possível finalizar transações usando os comandos COMMIT
e ROLLBACK
. Uma nova transação é iniciada automaticamente após o término de uma transação usando esses comandos, portanto, não há um comando START TRANSACTION separado.