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.

1voto

RomCoo Punkte 1848

So mache ich das:

Da Sie die freie Wahl des DB-Typs haben, verwenden Sie eine dateibasierte DB wie z.B. Firebird.

Erstellen Sie eine Vorlagen-DB mit dem Schema, das zu Ihrem aktuellen Zweig passt, und speichern Sie sie in Ihrem Repository.

Wenn Sie Ihre Anwendung programmatisch ausführen, erstellen Sie eine Kopie Ihrer Vorlagen-DB, speichern diese an einem anderen Ort und arbeiten nur mit dieser Kopie.

Auf diese Weise können Sie Ihr DB-Schema ohne die Daten unter Versionskontrolle stellen. Und wenn Sie Ihr Schema ändern, müssen Sie nur die Vorlage DB ändern

1voto

AkiShankar Punkte 332

Ablage jede Ebene der Datenbankänderungen unter Git-Versionskontrolle ist so, als würde man seine gesamte Datenbank mit jeder Übertragung und Wiederherstellung Ihre gesamte Datenbank bei jedem Abruf. Wenn Ihre Datenbank so anfällig für wichtige Änderungen ist, dass Sie es sich nicht leisten können, sie zu verlieren, können Sie einfach Ihre pre_commit y post_merge Haken. Das habe ich auch bei einem meiner Projekte gemacht und die Anleitung finden Sie aquí .

1voto

Marko Punkte 1485

Was ich in meinen persönlichen Projekten zu tun ist, speichere ich meine gesamte Datenbank zu Dropbox und dann Punkt MAMP, WAMP-Workflow, es direkt von dort zu verwenden Auf diese Weise ist die Datenbank immer auf dem neuesten Stand, wo immer ich etwas entwickeln muss. Aber das ist nur für die Entwicklung! Für die Live-Seiten verwende ich natürlich einen eigenen Server :)

1voto

Jerry M Sunny Punkte 21

Ich würde neXtep (Link entfernt - Domain wurde von einer NSFW-Website übernommen) für die Versionskontrolle der Datenbank empfehlen, es hat eine gute Dokumentation und Foren, die erklären, wie man installiert und welche Fehler auftreten. Ich habe es für postgreSQL 9.1 und 9.3 getestet, ich konnte es für 9.1 zum Laufen bringen, aber für 9.3 scheint es nicht zu funktionieren.

1voto

key_ Punkte 577

Das ist es, was ich in meinen Projekten zu tun versuche:

  • getrennte Daten und Schema und Standarddaten.

Die Datenbankkonfiguration wird in einer Konfigurationsdatei gespeichert, die nicht unter Versionskontrolle steht (.gitignore)

Die Datenbankvorgaben (für die Einrichtung neuer Projekte) sind eine einfache SQL-Datei unter Versionskontrolle.

Für das Datenbankschema erstellen Sie einen Datenbankschema-Dump unter der Versionskontrolle.

Die gängigste Methode ist die Verwendung von Aktualisierungsskripten, die SQL-Anweisungen enthalten (ALTER Table oder UPDATE). Sie müssen auch einen Ort in Ihrer Datenbank haben, an dem Sie die aktuelle Version Ihres Schemas speichern)

Schauen Sie sich andere große Open-Source-Datenbankprojekte an (Piwik oder Ihr bevorzugtes CMS-System), sie alle verwenden Updateskripte (1.sql,2.sql,3.sh,4.php.5.sql)

Dies ist jedoch eine sehr zeitintensive Aufgabe, da Sie die Updateskripte erstellen und testen müssen und ein gemeinsames Updateskript ausführen müssen, das die Version vergleicht und alle erforderlichen Updateskripte ausführt.

Theoretisch (und das ist es, wonach ich suche) könnten Sie also das Datenbankschema nach jeder Änderung dumpen (manuell, conjob, git hooks (vielleicht vor dem commit)) (und nur in einigen sehr speziellen Fällen Updatescripts erstellen)

Danach können Sie die Schemata (Dump und aktuelle Datenbank) in Ihrem gewöhnlichen Updateskript vergleichen und dann automatisch die notwendigen ALTER-Anweisungen generieren. Es gibt bereits einige Tools, die dies tun können, aber ich habe noch kein gutes gefunden.

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