web-dev-qa-db-fra.com

PostgreSQL: outil de diff / patch de schéma

Considérez le paramètre suivant:

  • Une DB de production
  • Une base de données de développement, sur laquelle des modifications de schéma sont apportées pour activer de nouvelles fonctionnalités

Lorsque le développement d'une nouvelle fonctionnalité est terminé, je dois mettre à jour manuellement le schéma prod db jusqu'à ce que pg_dump --schema-only sur les deux DB est identique. Ce processus est sujet aux erreurs et fastidieux.

Je recherche donc un outil qui peut:

  • Affiche un résumé des différences entre deux schémas (comme diff). Notez que je ne cherche pas un simple diff textuel du schéma, mais un outil plus élaboré qui peut tirer des conclusions comme "Table X a une nouvelle colonne Y".
  • Générez automatiquement le code SQL qui convertirait un schéma en un autre (comme patch )

Existe-t-il un schéma diff / patch outil qui peut m'aider à convertir les schémas de production en schémas de développement plus avancés?

14
Adam Matan

Désolé de ressusciter une ancienne question

Récemment, j'utilise le xDBE DataGrip Outil de gestion de base de données par JetBrains.

Il prend en charge plusieurs moteurs de base de données, dans l'excellent IDE Jetbrains, et une fonctionnalité clé que j'ai trouvée utile est la possibilité de diff 2 tables (DEV et PROD).

Ci-dessous, une capture d'écran du diff en action (dans ce cas, il n'y a qu'une seule différence de colonne). La capture d'écran est le résultat du bouton "Fusionner à droite" en haut, générant le SQL requis pour mettre à jour la bonne table.

0xDBE SQL Table Diff

J'espère que ce nouvel outil vous aidera.

12
Ewan

Utilisez liquibase .

Il prend en charge diff , générant une base de données à partir de zéro, corrigeant une base de données, annulant une base de données et un tas d'autres choses.

Avant, vous deviez tout écrire en XML avec la base de données, mais plus maintenant. Vous pouvez en écrire 99% dans le dialecte SQL de votre choix. Exemple:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;

Vous devriez garder vos changelogs de base de données dans git ou what-have-you.

6
Neil McGuigan