Eu tenho um pooler de conexão muito simples no meu aplicativo. Ao devolver uma conexão, preciso garantir que nenhuma variável seja definida e nenhuma transação ainda esteja em andamento. Eu entendo que ROLLBACK; DISCARD ALL;
deve ser suficiente.
Na maioria dos casos, se a transação foi bem-sucedida, ela será confirmada antes de entregá-la ao pooler e, neste momento, terei um aviso como WARNING: there is no transaction in progress
.
Existe alguma maneira de executar um ROLLBACK
somente se ainda estivermos em uma transação? Ou existe outro método preferencial para limpar uma conexão?
Assumindo libpq, você pode chamar PQtransactionStatus para descobrir se há uma transação aberta.
Se você tiver apenas SQL, poderá chamar
Essa viagem de ida e volta adicionará latência ao processo de limpeza, mas isso não será um problema, desde que não haja nenhum processo bloqueado aguardando a conexão liberada.