sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres pg_dump vuelca la base de datos en un orden diferente cada vez

Aquí hay un script útil para preprocesar pg_dump salida para que sea más adecuado para diferenciar y almacenar en el control de versiones:

https://github.com/akaihola/pgtricks

pg_dump_splitsort.py divide el volcado en los siguientes archivos:

  • 0000_prologue.sql :todo hasta la primera COPY
  • 0001_<schema>.<table>.sql
    .
    .
    NNNN_<schema>.<table>.sql :datos para cada tabla ordenados por el primer campo
  • 9999_epilogue.sql :todo después de la última COPIA

Los archivos para los datos de la tabla están numerados, por lo que se puede usar una concatenación ordenada simple de todos los archivos para volver a crear la base de datos:

$ cat *.sql | psql <database>

Descubrí que una buena manera de echar un vistazo rápido a las diferencias entre volcados es usar meld herramienta en todo el directorio:

$ meld old-dump/ new-dump/

Almacenar el volcado en el control de versiones también brinda una visión decente de las diferencias. Aquí se explica cómo configurar git para usar el color en las diferencias:

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

Nota: Si ha creado/eliminado/renombrado tablas, recuerde eliminar todos los .sql archivos antes de posprocesar el nuevo volcado.