¿Es posible comparar dos bases de datos con estructura idéntica? Digamos que tengo dos bases de datos DB1 y DB2 y quiero verificar si hay una diferencia en los datos entre ellas.
¿Es posible comparar dos bases de datos con estructura idéntica? Digamos que tengo dos bases de datos DB1 y DB2 y quiero verificar si hay una diferencia en los datos entre ellas.
Respuestas:
(tenga en cuenta que la mayoría de estas herramientas solo pueden comparar la estructura, pero no los datos)
Gratis:
Comercial:
apgdiff
no admite bien las tablas heredadas, y la excepción se lanza inmediatamente cuando intento usarlo. WbSchemaDiff
funciona muy bien, sorpresa!
Intente usar pg_dump
ambas bases de datos y diferenciar los archivos.
pg_dump
está bien para eso. Si ve diferencias significativas con pg_dump
probablemente esté tratando de comparar cosas que están más allá de ser comparables. Al menos para comparar PG dbs.
psql -c '\x' -c 'SELECT... ORDER BY...'
lugar de pg_dump
.
Otra aplicación gratuita (que solo puede comparar estructura, pero no datos ):
DBeaver : puede seleccionar bases de datos, tablas, etc. para comparar entre sí
He evaluado muchas de las herramientas y he encontrado la siguiente solución:
Comparación de esquemas :
Los más interesantes fueron Liquibase, Persyas y PgCodeKeeper:
( problema ) Liquebase convierte:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
dentro
BIGSERIAL
Entonces fue rechazado usar
( problema ) Persyas funcionó bien hasta que agregué un esquema adicional y comienza a arrojar lo siguiente:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Entonces encontré que PgCodeKeeper funciona perfectamente y está vivo (puede verificar las versiones). Yo uso el siguiente 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
Comparación de datos: he intentado usar Liquebase y simplemente no funciona, puede ver los pasos que probé en mi pregunta sin respuesta sobre la diferencia de datos de dos bases de datos con Liquebase
Así que encontré otro proyecto SQL Workbench / J Funciona muy bien y genera diferencias reales en sql. Yo uso el siguiente 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 herramientas soportan la filtración de objetos. Es realmente conveniente.
Migraciones
Y finalmente uso Liquebase solo para la migración / seguimiento de versiones.
Estoy trabajando en una herramienta de comparación integral para Postgres. Será gratis mientras esté en beta.
Inicialmente, esto es solo una comparación de esquema (DDL), pero probablemente también ampliaremos los datos. Creo que esta es una herramienta que muchas tiendas necesitan para pasar de su RDBMS actual sin tener que cambiar también cómo funcionan sus entornos de desarrollo, operaciones, etc.
La mejor herramienta que he visto en mi vida https://pythonhosted.org/Pyrseas/
Obtener volcado de la base de datos A dbtoyaml ...
Genere la migración desde A => B yamltodb ... [archivo generado en el paso 1]
También estoy buscando una herramienta para comparar datos en bases de datos (en particular, estaba interesado en comparar Redshift DB). Hasta ahora, lo mejor que encontré es https://www.dbbest.com/products/database-compare-suite/#close . Lamentablemente, la prueba gratuita caduca después de un día.
Creé una herramienta para comparar 2 bases de datos PostgreSQL en vivo (no volcados), datos de tablas y secuencias. Bastante temprano, pero logré lo que quería que hiciera, tal vez también pueda ayudarte.
En mi opinión, Dbforge es la herramienta más poderosa para los datos de comapring en postgresql. Es un producto de la empresa Devart. Puede descargarlo aquí .