PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres pg_dump vide la base de données dans un ordre différent à chaque fois

Voici un script pratique pour pré-traiter pg_dump sortie pour la rendre plus adaptée à la différenciation et au stockage dans le contrôle de version :

https://github.com/akaihola/pgtricks

pg_dump_splitsort.py divise le vidage dans les fichiers suivants :

  • 0000_prologue.sql :tout jusqu'à la première COPIE
  • 0001_<schema>.<table>.sql
    .
    .
    NNNN_<schema>.<table>.sql :données pour chaque table triées par le premier champ
  • 9999_epilogue.sql :tout après la dernière COPIE

Les fichiers pour les données de table sont numérotés afin qu'une simple concaténation triée de tous les fichiers puisse être utilisée pour recréer la base de données :

$ cat *.sql | psql <database>

J'ai trouvé qu'un bon moyen de jeter un coup d'œil rapide aux différences entre les vidages est d'utiliser le meld outil sur tout le répertoire :

$ meld old-dump/ new-dump/

Le stockage du vidage dans le contrôle de version donne également une vue décente des différences. Voici comment configurer git pour utiliser la couleur dans les diffs :

# ~/.gitconfig
[color]
        diff = true
[color "diff"]
        frag = white blue bold
        meta = white green bold
        commit = white red bold

Remarque : Si vous avez créé/supprimé/renommé des tables, n'oubliez pas de supprimer tous les .sql fichiers avant de post-traiter le nouveau vidage.