105 votes

Comment comparer les données entre deux bases de données dans PostgreSQL ?

Est-il possible de comparer deux bases de données dont la structure est identique ? Disons que j'ai deux bases de données DB1 et DB2 et que je veux vérifier s'il y a une différence de données entre elles.

0 votes

0 votes

dbForge Data Compare pour PostgreSQL résout ces problèmes.

0 votes

postgrescompare.com/downloads compare aussi les données maintenant

96voto

a_horse_with_no_name Points 100769

Il existe plusieurs outils :

(notez que la plupart de ces outils ne peuvent comparer que la structure, mais pas les données)

Free Ones :

Commercial :

17 votes

Seuls liquibase.org et Aqua Data Studio semblent comparer les données, les autres ne comparent que les schémas.

0 votes

@AmirAliAkbari Liquibase fait prise en charge des différences de schémas

2 votes

Il semble que apgdiff ne supporte pas bien les tables héritées, et une exception est immédiatement levée lorsque j'essaie de l'utiliser. WbSchemaDiff fonctionne très bien, surprise !

45voto

Júlio Santos Points 2638

Essayez d'utiliser pg_dump sur les deux bases de données et de différencier les fichiers.

23 votes

+1 pour simple et direct. Mais sommes-nous sûrs que pg_dump va vider les données de bases de données identiques dans le même ordre si, par exemple, les tables ont été construites dans des ordres différents ? (J'espère que l'ordre est basé sur les dépendances des contraintes, sans se soucier du tout du moment de la création, mais l'espoir n'est pas bien adapté).

10 votes

Vous pouvez utiliser -a -d et | trier . Mais ces données ne sont peut-être pas importables, mais elles peuvent être utilisées pour une vérification de base.

0 votes

Cela devrait être plus haut dans les résultats, pour être honnête. On ne devrait pas avoir à compter sur un diff pour sauver la journée, alors ces solutions complètes, lourdes et basées sur Java semblent exagérées. Cependant, il est judicieux de vérifier l'intégrité de vos migrations et de vos applications. pg_dump est parfait pour cela. Si vous constatez des différences significatives avec pg_dump vous essayez probablement de comparer des choses qui ne sont pas comparables. Au moins pour comparer des dbs PG.

14voto

iki Points 153

Une autre application gratuite (qui peut seulement comparer la structure, mais pas les données ) :

DBeaver - vous pouvez sélectionner des bases de données, des tables, etc. pour les comparer entre elles

1 votes

Pourriez-vous mieux expliquer comment comparer les données de 2 bases de données avec DBeaver ?

1 votes

Pour autant que je sache, DBeaver ne permet que la comparaison des métadonnées, pas celle des données.

0 votes

Très bel outil. Il est vrai que son utilisation n'est pas très intuitive au début. Vous devez d'abord sélectionner 2 objets ou plus pour pouvoir voir cette option.

9voto

i.bondarenko Points 3429

J'ai évalué un grand nombre d'outils et j'ai trouvé la solution suivante :

Comparaison des schémas :

Les plus intéressants étaient Liquibase, Persyas et PgCodeKeeper :

( numéro ) Liquebase se convertit :

 SET DEFAULT nextval('myschema.name_id_seq'::regclass)

en

BIGSERIAL

Il a donc été rejeté d'utiliser

( numéro ) Persyas fonctionnait bien jusqu'à ce que j'ajoute des schémas supplémentaires et qu'il commence à envoyer les messages suivants :

pyrseas_1       | TypeError: 'NoneType' object is not iterable

J'ai donc trouvé PgCodeKeeper il fonctionne parfaitement et il est vivant (vous pouvez vérifier les releases). 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 des données : J'ai essayé d'utiliser Liquebase et cela ne fonctionne 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 Banc d'essai SQL/J Il fonctionne très bien et génère de vraies différences en 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 le filtrage des objets. C'est vraiment pratique.

Migrations

Et enfin, j'utilise Liquebase uniquement pour la migration/le suivi des versions.

6voto

Neil Anderson Points 185

Je travaille sur un outil de comparaison complet pour Postgres. Il sera gratuit pendant la phase bêta.

PostgresCompare

Dans un premier temps, il s'agit uniquement d'une comparaison de schémas (DDL), mais nous allons probablement l'étendre aux données également. Je pense qu'il s'agit d'un outil dont beaucoup d'entreprises ont besoin pour abandonner leur SGBDR actuel sans avoir à changer la façon dont leurs environnements de développement, leurs opérations, etc. fonctionnent également.

1 votes

Les données sont également très importantes. Le schéma seul n'est pas suffisant.

1 votes

Bonjour @Houman. Désolé pour cette réponse tardive. Vous avez raison, les données seront la prochaine étape. L'avantage de construire l'outil de comparaison de schémas en premier est que tout le code pour découvrir les tables, etc. peut être partagé entre les deux.

0 votes

J'ai trouvé cette réponse en construisant moi-même un outil simple de comparaison de schémas. J'ai parcouru votre site Web et l'outil semble très prometteur. J'ai hâte d'essayer la version bêta.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X