Criei um db db novo a partir de um servidor de produção com os sinalizadores --data-only
e --column-inserts
, portanto, só tenho um monte de instruções de inserção para inserir dados ao executar uma restauração em um servidor intermediário.
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Como excluo todos os dados no banco de dados do servidor intermediário primeiro, antes de restaurar os dados do dump de produção?
Eu quero excluir todos os dados apenas para não precisar soltar e criar o banco de dados e todas essas coisas. Eu só quero remover dados e inserir novos dados, isso é tudo.
Não tenho a opção de descartar e criar o banco de dados por vários motivos. Vou ter que remover todos os dados e apenas inserir apenas, portanto, o que for preciso para descobrir como fazer isso, estou disposto a fazê-lo, mas preciso de ajuda, obviamente, para começar.
Eu também preciso automatizar esse processo. Automatizará "descarregando dados do banco de dados de produção", "excluindo dados no banco de dados intermediário" e "restaurando dados no banco de dados intermediário". Eu só preciso de ajuda na parte "excluindo dados no banco de dados temporário".
Estou executando no PostgreSQL 9.5.2
fonte
TRUNCATE table1, table2, ... <list of all tables>;
? ambos fazem a mesma coisa?O pg_restore possui um sinalizador --clean (ou possivelmente --create) que excluirá automaticamente os dados antes de executar as operações.
A excelente documentação deve ajudá-lo muito ...
Apenas para esclarecer, caso seja confuso:
Isso não descartará o banco de dados real .. apenas as tabelas / visualizações / etc.
Se, por algum motivo, descartar e recriar as tabelas não for aceitável, você precisará trabalhar mais para criar manualmente um script que crie um
data only
dump a partir do banco de dados de origem, problemasTRUNCATE
ouDELETE
no banco de dados de destino e, em seguida, carrega o despejo de dados. Não há nenhuma maneira rápida / inteligente de fazer isso, até onde eu saiba.fonte
A consulta acima irá gerar consultas truncadas para todas as tabelas no banco de dados.
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.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