Ist es möglich, zwei Datenbanken mit identischer Struktur zu vergleichen? Angenommen, ich habe zwei Datenbanken DB1 und DB2 und möchte prüfen, ob zwischen ihnen ein Datenunterschied besteht.
Ist es möglich, zwei Datenbanken mit identischer Struktur zu vergleichen? Angenommen, ich habe zwei Datenbanken DB1 und DB2 und möchte prüfen, ob zwischen ihnen ein Datenunterschied besteht.
Antworten:
(Beachten Sie, dass die meisten dieser Tools nur die Struktur vergleichen können, nicht jedoch Daten.)
Freie:
Kommerziell:
apgdiff
das Erben von Tabellen nicht gut unterstützt wird und Ausnahmen sofort ausgelöst werden, wenn ich versuche, sie zu verwenden. WbSchemaDiff
funktioniert sehr gut, Überraschung!
Versuchen Sie, pg_dump
beide Datenbanken zu verwenden und die Dateien zu unterscheiden.
pg_dump
ist in Ordnung. Wenn Sie signifikante Unterschiede feststellen, pg_dump
versuchen Sie wahrscheinlich, Dinge zu vergleichen, die nicht vergleichbar sind. Zumindest zum Vergleich von PG dbs.
psql -c '\x' -c 'SELECT... ORDER BY...'
anstelle von benutze pg_dump
.
Eine weitere kostenlose App (die nur Struktur, aber keine Daten vergleichen kann ):
DBeaver - Sie können Datenbanken, Tabellen usw. auswählen, um sie miteinander zu vergleichen
Ich habe viele Tools evaluiert und folgende Lösung gefunden:
Schemavergleich :
Am interessantesten waren Liquibase, Persyas und PgCodeKeeper:
( Problem ) Liquebase konvertiert:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
in
BIGSERIAL
Daher wurde die Verwendung abgelehnt
( Problem ) Persyas hat einwandfrei funktioniert, bis ich ein zusätzliches Schema hinzugefügt habe und es beginnt Folgendes zu werfen:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Also habe ich festgestellt, dass PgCodeKeeper perfekt funktioniert und lebt (Sie können Releases überprüfen). Ich benutze folgenden Befehl:
./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
Datenvergleich: Ich habe versucht, Liquebase zu verwenden, und es funktioniert einfach nicht. Sie können die Schritte sehen, die ich in meiner unbeantworteten Frage zum Datenunterschied zweier Datenbanken mit Liquebase versucht habe
Also habe ich ein anderes Projekt gefunden SQL Workbench / J Es funktioniert wirklich gut und generiert Reall Diff in SQL. Ich benutze folgenden Befehl:
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 ;'"
Beide Tools unterstützen die Objektfilterung. Es ist wirklich praktisch.
Migrationen
Und schließlich benutze ich Liquebase nur für die Migration / Versionsverfolgung.
Ich arbeite an einem umfassenden Vergleichstool für Postgres. Es wird kostenlos sein, während in der Beta.
Anfangs ist dies nur ein Schema (DDL) -Vergleich, aber wir werden wahrscheinlich auch auf Daten erweitern. Ich glaube, dies ist ein Tool, das viele Shops benötigen, um von ihrem aktuellen RDBMS zu wechseln, ohne auch die Funktionsweise ihrer Entwicklungsumgebungen, Vorgänge usw. ändern zu müssen.
Das beste Tool, das ich je gesehen habe https://pythonhosted.org/Pyrseas/
Holen Sie sich Dump aus der Datenbank A dbtoyaml ...
Migration von A => B yamltodb generieren ... [Datei in Schritt 1 generiert]
Ich suche auch nach einem Tool zum Vergleichen von Daten in Datenbanken (insbesondere war ich daran interessiert, Redshift DB zu vergleichen). Bisher ist das Beste, was ich gefunden habe, https://www.dbbest.com/products/database-compare-suite/#close . Leider läuft die kostenlose Testversion nach einem Tag ab.
Ich habe ein Tool erstellt, um 2 Live-PostgreSQL-Datenbanken (keine Dumps), Tabellendaten und Sequenzen zu vergleichen. Ziemlich früh, aber erreicht, was ich wollte, vielleicht kann es Ihnen auch helfen.
Meiner Meinung nach ist Dbforge das leistungsstärkste Tool zum Komprimieren von Daten in Postgresql. Es ist ein Produkt der Firma Devart. Sie können es hier herunterladen .