É possível comparar dois bancos de dados com estrutura idêntica? Digamos que eu tenha dois bancos de dados DB1 e DB2 e desejo verificar se há diferença de dados entre eles.
É possível comparar dois bancos de dados com estrutura idêntica? Digamos que eu tenha dois bancos de dados DB1 e DB2 e desejo verificar se há diferença de dados entre eles.
Respostas:
(observe que a maioria dessas ferramentas só pode comparar a estrutura, mas não os dados)
Grátis:
Comercial:
apgdiff
não oferece suporte a tabelas herdadas bem e uma exceção é lançada imediatamente quando tento usá-la. WbSchemaDiff
funciona muito bem, surpresa!
Tente usar pg_dump
em ambos os bancos de dados e comparar os arquivos.
pg_dump
é adequado. Se você vê diferenças significativas com pg_dump
você provavelmente está tentando comparar coisas que estão além de serem comparáveis. Pelo menos para comparar DBS PG.
psql -c '\x' -c 'SELECT... ORDER BY...'
vez de pg_dump
.
Outro aplicativo gratuito (que só pode comparar a estrutura, mas não os dados ):
DBeaver - você pode selecionar bancos de dados, tabelas, etc. para comparar uns com os outros
Eu avaliei muitas das ferramentas e encontrei a seguinte solução:
Comparação de esquema :
Os mais interessantes foram Liquibase, Persyas e PgCodeKeeper:
( edição ) Liquebase converte:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
para dentro
BIGSERIAL
Portanto, foi rejeitado para usar
( problema ) Persyas funcionou bem até que eu adicionei algum esquema adicional e ele começou a apresentar o seguinte:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Então eu descobri que o PgCodeKeeper funciona perfeitamente e está vivo (você pode verificar as versões). Eu uso o seguinte comando:
./pgcodekeeper-cli.sh -E -I ./ignore.txt \
-s "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-t "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-o /result/schema-diff-$(date +'%m%d%y_%H%M%S').sql
Comparação de dados: Eu tentei usar o Liquebase e ele simplesmente não funciona, você pode ver as etapas que tentei na minha pergunta não respondida sobre a diferença de dados de dois bancos de dados com o Liquebase
Então eu encontrei outro projeto SQL Workbench / J Ele funciona muito bem e gera diff real em sql. Eu uso o seguinte comando:
java -jar /sqlworkbench.jar -command="'WbDataDiff -excludeTables=$EXCLUDE_TABLES \
-referenceConnection=$REFERENCE_CONNECTION \
-targetConnection=$TARGET_CONNECTION -referenceSchema=$1 \
-targetSchema=$1 -file=$DIFF_RESULT_FILE -singleFile=true \
-includeDelete=true -ignoreMissingTarget=true ;'"
Ambas as ferramentas suportam a filtragem de objetos. É muito conveniente.
Migrações
E, finalmente, uso o Liquebase apenas para rastreamento de migração / versão.
Estou trabalhando em uma ferramenta de comparação abrangente para Postgres. Será gratuito enquanto estiver em beta.
Inicialmente, esta é apenas uma comparação de esquema (DDL), mas provavelmente iremos expandir para dados também. Eu acredito que esta é uma ferramenta que muitas lojas precisam para mudar de seu RDBMS atual sem ter que mudar também como seus ambientes de desenvolvimento, operações, etc. funcionam.
A melhor ferramenta que já vi https://pythonhosted.org/Pyrseas/
Obter despejo do banco de dados A dbtoyaml ...
Gerar migração de A => B yamltodb ... [arquivo gerado na etapa 1]
Também estou procurando uma ferramenta para comparar dados em bancos de dados (em particular, eu estava interessado em comparar o Redshift DB). Até agora, o melhor que encontrei é https://www.dbbest.com/products/database-compare-suite/#close . Infelizmente, a avaliação gratuita expira após um dia.
Criei uma ferramenta para comparar 2 bancos de dados PostgreSQL ao vivo (não dumps), dados de tabelas e sequências. Muito cedo, mas consegui o que queria, talvez possa ajudar você também.
Na minha opinião, Dbforge é a ferramenta mais poderosa para dados de comapring no postgresql. É um produto da empresa Devart. Você pode baixar aqui .