327 Stimmen

Wie kann ich eine Datenbank unter Git (Versionskontrolle) stellen?

Ich tue eine Webanwendung, und ich muss einen Zweig für einige wichtige Änderungen zu machen, die Sache ist, diese Änderungen erfordern Änderungen an der Datenbank-Schema, so möchte ich die gesamte Datenbank unter Git als auch setzen.

Wie mache ich das? Gibt es einen bestimmten Ordner, den ich unter einem Git-Repository behalten kann? Woher weiß ich, welcher es ist? Wie kann ich sicher sein, dass ich den richtigen Ordner verwende?

Ich muss sicher sein, denn diese Änderungen sind nicht abwärtskompatibel; ich kann es mir nicht leisten, einen Fehler zu machen.

Die Datenbank ist in meinem Fall PostgreSQL

Bearbeiten:

Jemand schlug vor, Sicherungskopien zu erstellen und die Sicherungsdatei statt der Datenbank unter Versionskontrolle zu stellen. Um ehrlich zu sein, finde ich das wirklich schwer zu schlucken.

Es muss doch einen besseren Weg geben.

Aktualisierung:

OK, es gibt also keinen besseren Weg, aber ich bin immer noch nicht ganz überzeugt, also werde ich die Frage etwas abändern:

Ich möchte die gesamte Datenbank unter Versionskontrolle stellen. Welche Datenbank-Engine kann ich verwenden, damit ich die eigentliche Datenbank unter Versionskontrolle stellen kann, anstatt ihren Dump?

Wäre Sqlite git-freundlich?

Da dies nur die Entwicklungsumgebung ist, kann ich jede beliebige Datenbank wählen.

Bearbeiten2:

Was ich wirklich möchte, ist nicht meine Entwicklungsgeschichte zu verfolgen, sondern in der Lage sein, von meinem "neuen radikalen Änderungen" Zweig auf den "aktuellen stabilen Zweig" zu wechseln und in der Lage sein, zum Beispiel einige Bugs/Probleme, etc, mit dem aktuellen stabilen Zweig zu beheben. Wenn ich also den Zweig wechsle, wird die Datenbank automatisch mit dem Zweig kompatibel, in dem ich mich gerade befinde. Die eigentlichen Daten sind mir eigentlich ziemlich egal.

6voto

Hakan Deryal Punkte 2733

Es gibt ein großartiges Projekt namens Migrations unter Doctrine, das speziell für diesen Zweck entwickelt wurde.

Es ist noch in der Alpha-Phase und für php gebaut.

http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/index.html

4voto

CShark Punkte 2075

Werfen Sie einen Blick auf RedGate SQL Source Control.

http://www.red-gate.com/products/sql-development/sql-source-control/

Bei diesem Tool handelt es sich um ein SQL Server Management Studio-Snap-In, das es Ihnen ermöglicht, Ihre Datenbank mit Git unter Source Control zu stellen.

Mit $495 pro Benutzer ist es ein bisschen teuer, aber es gibt eine 28-tägige kostenlose Testversion.

HINWEIS Ich bin in keiner Weise mit RedGate verbunden.

4voto

Ciges Punkte 1105

Ich möchte etwas Ähnliches machen und meine Datenbankänderungen zu meinem Versionskontrollsystem hinzufügen.

Ich werde den Ideen in diesem Beitrag von Vladimir Khorikov folgen "Bewährte Praktiken der Datenbankversionierung" . Zusammenfassend werde ich

  • sowohl ihr Schema als auch die Referenzdaten in einem Quellkontrollsystem speichern.
  • für jede Änderung wird ein eigenes SQL-Skript mit den Änderungen erstellt

Für den Fall, dass es hilft!

3voto

cannadayr Punkte 373

Ich habe ein Tool für Sqlite veröffentlicht, das genau das tut, wonach Sie fragen. Es verwendet einen benutzerdefinierten Diff-Treiber, der das Sqlite-Projekt-Tool 'sqldiff' nutzt, UUIDs als Primärschlüssel und lässt die Sqlite-Rowid weg. Es ist noch in der Alpha-Phase, daher ist Feedback erwünscht.

Postgres und mysql sind schwieriger, da die Binärdaten in mehreren Dateien gespeichert werden und möglicherweise nicht einmal dann gültig sind, wenn Sie einen Snapshot erstellen könnten.

https://github.com/cannadayr/git-sqlite

2voto

Peter Eisentraut Punkte 33105

Was Sie im Grunde genommen wollen, ist vielleicht so etwas wie Postfaktisch die Versionen einer Datenbank in einer Datenbank speichert. Dies prüfen Präsentation .

Das Projekt wurde anscheinend nie wirklich umgesetzt, so dass es Ihnen wahrscheinlich nicht sofort weiterhilft, aber es ist ein interessantes Konzept. Ich fürchte, dass es sehr schwierig wäre, dies richtig zu machen, denn selbst bei Version 1 müssten alle Details stimmen, damit die Leute ihre Arbeit darauf abstützen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X