25001: active_sql_transaction
PostgreSQLO que significa?
Um comando que só pode ser executado fora de uma transação, ou no início dela, foi chamado com uma transação ativa. Alguns comandos não são executados dentro de um bloco de transação.
Por que acontece?
Configurações como SET TRANSACTION ISOLATION LEVEL devem ser emitidas antes da primeira consulta do bloco ('SET TRANSACTION ISOLATION LEVEL must be called before any query'). Da mesma forma, alguns comandos são rejeitados dentro de um BEGIN/transação aberto. Geralmente decorre de a aplicação desabilitar o autocommit e iniciar uma transação silenciosamente.
Como resolver
Emita as configurações de nível de transação logo no início da transação, antes de qualquer consulta: BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ... Verifique se a biblioteca cliente abre uma transação implícita (configuração de autocommit). Para comandos que não podem ser executados dentro de um bloco de transação, feche primeiro a transação atual com COMMIT/ROLLBACK.