Est-il possible de comparer deux bases de données de structure identique? Disons que j'ai deux bases de données DB1 et DB2 et que je veux vérifier s'il existe une différence de données entre elles.
Est-il possible de comparer deux bases de données de structure identique? Disons que j'ai deux bases de données DB1 et DB2 et que je veux vérifier s'il existe une différence de données entre elles.
Réponses:
(notez que la plupart de ces outils ne peuvent comparer que la structure, mais pas les données)
Gratuits:
Commercial:
apgdiff
cela ne supporte pas bien les tables d'héritage, et une exception se déclenche immédiatement lorsque j'essaie de l'utiliser. WbSchemaDiff
fonctionne très bien, surprise!
Essayez d'utiliser pg_dump
sur les deux bases de données et en différant les fichiers.
pg_dump
c'est bien pour cela. Si vous voyez des différences significatives avec pg_dump
vous essayez probablement de comparer des choses qui ne sont pas comparables. Au moins pour comparer les dbs PG.
psql -c '\x' -c 'SELECT... ORDER BY...'
au lieu de pg_dump
.
Une autre application gratuite (qui ne peut comparer que la structure, mais pas les données ):
DBeaver - vous pouvez sélectionner des bases de données, des tables, etc. à comparer les unes avec les autres
J'ai évalué de nombreux outils et trouvé la solution suivante:
Comparaison de schéma :
Les plus intéressants étaient Liquibase, Persyas et PgCodeKeeper:
( problème ) Liquebase convertit:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
dans
BIGSERIAL
Il a donc été refusé d'utiliser
( problème ) Persyas a bien fonctionné jusqu'à ce que j'aie ajouté un schéma supplémentaire et qu'il commence à lancer ce qui suit:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
J'ai donc trouvé PgCodeKeeper qu'il fonctionne parfaitement et qu'il est vivant (vous pouvez vérifier les versions). J'utilise la commande suivante:
./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
Comparaison de données: j'ai essayé d'utiliser Liquebase et cela ne fonctionne tout simplement pas, vous pouvez voir les étapes que j'ai essayées dans ma question sans réponse sur la différence de données de deux bases de données avec Liquebase
J'ai donc trouvé un autre projet SQL Workbench / J. Cela fonctionne vraiment bien et génère des différences réelles dans SQL. J'utilise la commande suivante:
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 ;'"
Les deux outils prennent en charge la filtration d'objets. C'est vraiment pratique.
Migrations
Et enfin j'utilise Liquebase uniquement pour le suivi de la migration / version.
Je travaille sur un outil de comparaison complet pour Postgres. Ce sera gratuit en version bêta.
Au départ, il ne s'agit que d'une comparaison de schéma (DDL), mais nous allons probablement étendre également aux données. Je crois que c'est un outil dont beaucoup de magasins ont besoin pour quitter leur SGBDR actuel sans avoir à changer également le fonctionnement de leurs environnements de développement, de leurs opérations, etc.
Le meilleur outil que j'ai jamais vu https://pythonhosted.org/Pyrseas/
Obtenir un vidage de la base de données A dbtoyaml ...
Générer la migration de A => B yamltodb ... [fichier généré à l'étape 1]
Je recherche également un outil pour comparer des données dans des bases de données (en particulier j'étais intéressé par la comparaison de Redshift DB). Jusqu'à présent, le meilleur que j'ai trouvé est https://www.dbbest.com/products/database-compare-suite/#close . Malheureusement, l'essai gratuit expire après un jour.
J'ai créé un outil pour comparer 2 bases de données PostgreSQL en direct (pas de vidages), des données de table et des séquences. Assez tôt mais j'ai réalisé ce que je voulais, peut-être que cela peut vous aider aussi.
À mon avis, Dbforge est l'outil le plus puissant pour la compilation de données dans postgresql. C'est un produit de la société Devart que vous pouvez télécharger ici .