Como posso verificar se meu banco de dados restaurado é idêntico ao meu banco de dados original?
Aqui está o que eu fiz. Esta é uma maneira válida de verificar uma restauração?
# dump mydb_orig:
$ pg_dump --cluster 8.4/my.8.4.cluster mydb_orig > mydb_orig.dump
# create mydb_restored:
$ createdb --cluster 9.1/my.9.1.cluster mydb_restored
# load mydb_orig into mydb_restored:
$ psql -q --cluster 9.1/my.9.1.cluster -d mydb_restored -f mydb_orig.dump
# dump mydb_restored:
$ pg_dump --cluster 9.1/my.9.1.cluster > mydb_restored.dump
# verify mydb_orig and mydb_restored are identical:
$ diff mydb_orig.dump mydb_restored.dump
# The files have the same number of bytes, but some of the rows are in a different order, so sort them:
$ sort mydb_orig.dump > sorted.orig.dump
$ sort mydb_restored.dump > sorted.restored.dump
$ diff sorted.orig.dump sorted.restored.dump
# Now they are identical
Qual é o problema exato que você está tentando resolver?
pg_dump
epg_restore
são ferramentas PostgreSQL com suporte oficial, portanto, você deve presumir que elas foram implementadas corretamente. Você tem algumas opções para verificar se os bancos de dados são idênticos, dependendo de quão certo você precisa ser eles são idênticos.Sua verificação mais básica seria verificar se os dois bancos de dados têm as mesmas tabelas. Você pode encontrar uma lista de tabelas através do esquema de informações . Para uma verificação geral de que os dados são idênticos, você pode examinar as linhas de quantidade nessas tabelas e os limites superior e inferior das chaves primárias (supondo que você tenha chaves primárias em que a ordem faça sentido).
Se você realmente precisa garantir que os dados sejam idênticos, precisará produzir algum tipo de hash e compará-lo, e isso é essencialmente o que você está fazendo com despejos classificados. Vale lembrar, porém, que o banco de dados é mais do que apenas tabelas, você também precisa verificar as sequências .