Limpar base de dados sem fazer drop (Postgresql)

Posted Over 11 years ago. 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)