it-swarm.com.de

PostgreSQL: Schema Diff / Patch Tool

Betrachten Sie die folgende Einstellung:

  • Eine Produktions-DB
  • Eine Entwicklungsdatenbank, in der Schemaänderungen vorgenommen werden, um neue Funktionen zu ermöglichen

Wenn die Entwicklung einer neuen Funktion abgeschlossen ist, muss ich das prod db-Schema manuell aktualisieren, bis pg_dump --schema-only auf beiden DBs ist identisch. Dieser Prozess ist fehleranfällig und langwierig.

Also suche ich nach einem Werkzeug, das:

  • Zeigen Sie eine Zusammenfassung der Unterschiede zwischen zwei Schemata an (z. B. diff). Beachten Sie, dass ich nicht nach einem bloßen Textunterschied des Schemas suche, sondern nach einem ausgefeilteren Tool, das Schlussfolgerungen wie "Tabelle X hat eine neue Spalte Y" ziehen kann.
  • Generieren Sie automatisch den SQL-Code, der ein Schema in ein anderes konvertieren würde (wie patch ).

Gibt es ein Schema diff / Patch Tool, mit dem ich Produktschemata in fortgeschrittenere Entwicklungsschemata konvertieren kann?

14
Adam Matan

Tut mir leid, eine alte Frage wiederzubeleben

Vor kurzem habe ich die verwendet xDBE DataGrip Datenbankverwaltungstool von JetBrains.

Es unterstützt mehrere Datenbank-Engines in der hervorragenden Jetbrains-IDE, und eine wichtige Funktion, die ich als nützlich empfunden habe, ist die Fähigkeit, diff 2 Tabellen (DEV und PROD) zu erstellen.

Unten sehen Sie einen Screenshot des Diff in Aktion (in diesem Fall gibt es nur einen Spaltenunterschied). Der Screenshot ist das Ergebnis der Schaltfläche "Rechts zusammenführen" oben, mit der die SQL generiert wird, die erforderlich ist, um die richtige Tabelle auf den neuesten Stand zu bringen.

0xDBE SQL Table Diff

Hoffe, dieses neue Tool hilft.

12
Ewan

Verwenden Sie Liquibase .

Es unterstützt diff , das Generieren einer Datenbank von Grund auf neu, das Patchen einer Datenbank, das Zurücksetzen einer Datenbank und eine Reihe anderer Dinge.

Früher musste man alles mit liquibase in XML schreiben, aber nicht mehr. Sie können 99% davon in den SQL-Dialekt Ihrer Wahl schreiben. Beispiel:

--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;

Sie sollten Ihre Liquibase-Changelogs in Git oder What-Have-You aufbewahren.

6
Neil McGuigan