Estou escrevendo um script de shell (se tornará um cronjob) que irá:
1: despejar meu banco de dados de produção
2: importar o despejo para meu banco de dados de desenvolvimento
Entre as etapas 1 e 2, preciso limpar o banco de dados de desenvolvimento (largar todas as tabelas?). Como isso é melhor realizado a partir de um script de shell? Até agora, fica assim:
#!/bin/bash
time=`date '+%Y'-'%m'-'%d'`
# 1. export(dump) the current production database
pg_dump -U production_db_name > /backup/dir/backup-${time}.sql
# missing step: drop all tables from development database so it can be re-populated
# 2. load the backup into the development database
psql -U development_db_name < backup/dir/backup-${time}.sql
database
backup
postgresql
Hoff
fonte
fonte
dbname='db_name' && dropdb $dbname && createdb $dbname && psql -d $dbname -f dump.sql
Respostas:
Eu simplesmente larguei o banco de dados e depois o recriei. Em um sistema UNIX ou Linux, isso deve ser feito:
É assim que eu faço, na verdade.
fonte
createdb --owner=db_owner [--template=template0 --encoding=UTF8] db_name
i adicionar os dois últimos por padrão para todos os bancos de dadosSe você realmente não precisar de um backup do banco de dados despejado no disco em um formato de arquivo de script .sql em texto sem formatação, poderá conectar-se
pg_dump
epg_restore
diretamente juntos por um canal.Para eliminar e recriar tabelas, você pode usar a
--clean
opção de linha de comandopg_dump
para emitir comandos SQL para limpar (descartar) objetos de banco de dados antes de (os comandos para) criá-los. (Isso não descarta o banco de dados inteiro, apenas cada tabela / sequência / índice / etc. Antes de recriá-los.)Os dois acima ficariam assim:
fonte
Embora a linha a seguir seja retirada de um script em lote do Windows, o comando deve ser bastante semelhante:
Este comando é usado para limpar o banco de dados inteiro, eliminando-o. O comando
$DATABASE
(no Windows deve ser%DATABASE%
) é uma variável de ambiente no estilo do Windows que avalia o nome do banco de dados. Você precisará substituí-lo pelo seudevelopment_db_name
.fonte
dropdb
e já disponíveiscreatedb
? Se você pode executar o psql, também pode executá-los.Para despejar:
Restaurar:
fonte
Se você deseja limpar seu banco de dados chamado "example_db":
1) Faça login em outro banco de dados (por exemplo, 'postgres'):
2) Remova seu banco de dados:
3) Recrie seu banco de dados:
fonte
Eu usei:
fonte
Nota: minha resposta é sobre realmente excluir as tabelas e outros objetos de banco de dados; para apagar todos os dados em tabelas, ou seja truncar todas as tabelas , Endre Ambos forneceu uma declaração similarily bem executado (execução direta), um mês depois.
Para os casos em que você não pode simplesmente
DROP SCHEMA public CASCADE;
,DROP OWNED BY current_user;
ou algo assim, aqui está um script SQL independente que eu escrevi, que é seguro para transações (ou seja, você pode colocá-lo entreBEGIN;
eROLLBACK;
apenas para testá-lo ouCOMMIT;
realmente fazer a ação) e limpa “todos” os objetos do banco de dados ... bem, todos aqueles usados no banco de dados que nosso aplicativo usa ou eu poderia acrescentar sensatamente, que é:CHECK
,UNIQUE
)VIEW
s (normal ou materializado)public
ou internos ao banco de dados) "nós" possuímos: o script é útil quando executado como "não um superusuário de banco de dados"; um superusuário pode eliminar todos os esquemas (os realmente importantes ainda são explicitamente excluídos)Não são descartados (alguns deliberados; outros apenas porque eu não tinha exemplo em nosso banco de dados):
public
esquema (por exemplo, para itens fornecidos por extensão)Isso é realmente útil para os casos em que o dump que você deseja restaurar é de uma versão de esquema de banco de dados diferente (por exemplo, com Debian
dbconfig-common
, Flyway ou Liquibase / DB-Manul) do que o banco de dados no qual você deseja restaurá-lo.Eu também tenho uma versão que exclui "tudo, exceto duas tabelas e o que lhes pertence" (uma sequência, testada manualmente, desculpe, eu sei, chata), caso alguém esteja interessado; o diff é pequeno. Entre em contato comigo ou consulte este repositório, se estiver interessado.
SQL
Testado, exceto adições posteriores (
extensions
contribuído por Clément Prévost ), no PostgreSQL 9.6 (jessie-backports
). Remoção agregada testada em 9.6 e 12.2, remoção de procedimento testada em 12.2 também. Correções de bugs e melhorias adicionais são bem-vindas!fonte