2013/7/15 Danilo Silva <[email protected]>

> Pessoal,
>
> Meu usuário é dono do banco de dados, posso fazer praticamente tudo, mas
> um DROP/CREATE DATABASE não é permitido.
>
> Esse banco é para testes, existe alguma maneira rápida de zerá-lo? Ou
> seja, preciso "recriar" o banco, onde o procedimento seria: drop database;
> create database; importar arquivo com as queries. Mas como disse acima não
> tenho permissão para drop/create database.
>
> PostgreSQL 9.2.4 e 9.1.7
>
>
Não tem uma opção mágica do tipo: DROP ALL OBJECTS IN mydb. Mas tem algumas
opções:

1. Consultar os catálogos e gerar um script que remove tudo. Exemplo (não
testado):

$ psql -Atc "SELECT 'DROP TABLE '||r.oid::regclass::text||' CASCADE;' FROM
pg_class r JOIN pg_namespace n ON r.relnamespace=n.oid WHERE n.nspname !~
'^(information_schema|pg_.*)$' AND r.relkind='r';" <seu banco> | psql -At
<seu banco>

Claro que tem que adaptar para adicionar funções, operadores, esquemas, etc.

2. Geralmente mais fácil (pelo menos quando se tem poucos esquemas).
Remover o(s) esquema(s) com e recriá-los. Exemplo:

$ DROP SCHEMA public CASCADE;
$ CREATE SCHEMA public AUTHORIZATION <seu usuário>;
$ GRANT ALL ON SCHEMA public TO <seu usuário>;

3. Excluir todos objetos do seu usuário (se tiver objetos criados com outro
usuário terá que fazer para todos):

$ DROP OWNED BY <seu usuário>;

E tem outras maneiras...

Acho que a opção de excluir todo esquema e recriar é a mais confiável.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a