PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres pg_dump despeja o banco de dados em uma ordem diferente a cada vez


Aqui está um script útil para pré-processar pg_dump output para torná-lo mais adequado para diferenciar e armazenar no controle de versão:

https://github.com/akaihola/pgtricks

pg_dump_splitsort.py divide o dump nos seguintes arquivos:
  • 0000_prologue.sql :tudo até a primeira CÓPIA
  • 0001_<schema>.<table>.sql
    .
    .
    NNNN_<schema>.<table>.sql :dados para cada tabela classificados pelo primeiro campo
  • 9999_epilogue.sql :tudo após a última CÓPIA

Os arquivos para dados de tabela são numerados para que uma simples concatenação ordenada de todos os arquivos possa ser usada para recriar o banco de dados:
$ cat *.sql | psql <database>

Descobri que uma boa maneira de dar uma olhada rápida nas diferenças entre dumps é usar o meld ferramenta em todo o diretório:
$ meld old-dump/ new-dump/

Armazenar o dump no controle de versão também oferece uma visão decente das diferenças. Veja como configurar o git para usar cores nos diffs:
# ~/.gitconfig
[color]
        diff = true
[color "diff"]
        frag = white blue bold
        meta = white green bold
        commit = white red bold

Observação: Se você criou/descartou/renomeou tabelas, lembre-se de excluir todos os .sql arquivos antes de pós-processar o novo dump.