Limpar base de dados sem fazer drop (Postgresql)

Posted . Visible to the public.

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

João Paulo
Posted by João Paulo to ZeroGlosa (2012-12-13 20:21)