Eu precisava 'dropar' uma base de dados, mas não podia porque haviam processos conectados a ela e não podia matá-los.
Uma solução seria limpar o conteúdo de todas as tabelas usando o seguinte comando groovy:
def db = new Sql(dataSource)
db.eachRow("""SELECT 'TRUNCATE ' || table_name || ' CASCADE ' || ';'
FROM information_schema.tables
WHERE table_schema='public'
AND table_type='BASE TABLE';""") { stmt ->
db.execute(stmt[0].value.toString())
}
Mas esta não era funcional no meu caso, pois as tabelas são mantidas, apenas o conteúdo é apagado e o objetivo era restaurar um backup, mas com as tabelas ainda na base não era possível.
Outra forma é apagar todas as tabelas de um schema da base utilizando o seguinte comando sql:
drop schema public cascade;
create schema public;
Dessa forma todos os dados do schema public da sua base serão excluídos e um novo é criado em branco, dessa forma é possível restaurar um backup sem problemas.
As duas opções limpam a base sem precisar matar nenhum processo e nem fazer drop na base