Wie kann man das PostgreSQL-Schema mit Kommentaren versionieren?

9

Ich kontrolliere den größten Teil meiner Arbeit mit Git : Code, Dokumentation, Systemkonfiguration. Ich kann das, weil alle meine wertvollen Arbeiten als Textdateien gespeichert sind.

Ich habe auch viele SQL-Schemata für unsere Postgres-Datenbank geschrieben und bearbeitet. Das Schema enthält Ansichten und SQL-Funktionen, und wir werden Postgres-Funktionen in der Programmiersprache R (über PL / R ) schreiben .

Ich habe versucht, das Chunks-Schema, das ich und meine Mitarbeiter schreiben, zu kopieren und einzufügen, aber ich habe vergessen, das zu tun. Das Kopieren und die vergangene Aktion wiederholen sich und sind fehleranfällig.

Die Methode pg_dump / pg_restore funktioniert nicht, da Kommentare verloren gehen.

Idealerweise möchte ich eine Möglichkeit haben, mein aktuelles Schema in eine Datei oder Dateien zu extrahieren und die Kommentare beizubehalten, damit ich die Versionskontrolle durchführen kann.

Was ist die beste Vorgehensweise zum Versionskontrollschema mit Kommentaren?

Aleksandr Levchuk
quelle
2
Ich denke nicht, dass die Frage psql-spezifisch ist. Haben Sie einige der Antworten unter SO stackoverflow.com/… gelesen ? Es könnte etwas für dich sein.
DrColossos
@ DrColossos - einige dieser Fragen sind gute Migrationskandidaten.
CoderHawk
@DrColossos ist COMMENT ONin einer Umgebung ohne Postgres verfügbar? Ich denke nicht, dass es Standard-SQL ist. was bedeutet , diese könnte Postgres spezifisch sein.
Xenoterracide
@ Xenoterracide Sie haben Recht, ich habe mehr über das Problem der Versionierung einer Datenbank selbst gesprochen
DrColossos

Antworten:

9

Warum nicht COMMENT ONdie verschiedenen SCHEMAKomponenten, so dass Ihre Kommentare im Schema sind und ausgegeben werden.

KOMMENTAR speichert einen Kommentar zu einem Datenbankobjekt.
Geben Sie zum Ändern eines Kommentars einen neuen COMMENT-Befehl für dasselbe Objekt aus. Für jedes Objekt wird nur eine Kommentarzeichenfolge gespeichert. Um einen Kommentar zu entfernen, schreiben Sie NULL anstelle der Textzeichenfolge. Kommentare werden automatisch gelöscht, wenn das Objekt gelöscht wird.

Xenoterracid
quelle
Wirklich hilfreich, aber ich möchte dies noch nicht als Antwort markieren, da ich hoffe, eine Best-Practice-Antwort zu erhalten.
Aleksandr Levchuk
2

Versionskontrollschemata waren für mich immer problematisch. Im Allgemeinen kontrolliere ich das Schema, das mit dem von mir verwendeten Datenmodellierungswerkzeug generiert wurde. Das Modell ist auch versioniert. Ich verwende Unterschiede zwischen dem aktuellen und dem vorherigen Schema, um den Patch zu erstellen, der zum Aktualisieren des Schemas erforderlich ist. Einige Modellierungswerkzeuge erstellen verwendbare Schemaaktualisierungsskripte. Die Update-Skripte sind ebenfalls versioniert.

Ich sehe gelegentlich Skripte, die das Schema in einem Format sichern sollen, das zum Neuerstellen des Schemas geeignet ist. Eines davon könnte das sein, wonach Sie suchen. Einige der Modellierungs- und Abfragetools können Schemaregenerierungsskripts aus einem vorhandenen Schema erstellen. Wenn Sie dies skripten können, erhalten Sie möglicherweise eine Datei, die für die Versionskontrolle geeignet ist.

BillThor
quelle
2

Eine Alternative (oder Sie können sie kombinieren) zu meinem früheren Vorschlag besteht darin, Ihren SQL-Code in Ihren Editor (IDE) zu schreiben, die Dateien zu speichern und sie in Ihr VCS zu übertragen, nachdem Sie den Code in der Datenbank mit ausgeführt haben psql -1f. Auf diese Weise wird der Code versioniert, bevor er ausgeführt wird.

Xenoterracid
quelle
"Auf diese Weise wird der Code versioniert, bevor er jemals ausgeführt wird." Und das sollte es auch sein.
Mike Sherrill 'Cat Recall'
@catcall Ja, aber wenn Sie den Ops-Beitrag lesen, glaube ich nicht, dass dies der Fall ist.
Xenoterracide
Dies ist leider an den meisten Orten, die ich gesehen habe, nicht der Fall. Nur so können Sie sicherstellen, dass der von Ihnen getestete Code und die Qualitätssicherung mit dem Code übereinstimmen, den Sie in die Produktion verschieben. Die Idee, dass sich die "wahre" Datenbank im VCS und nicht im DBMS befindet, ist nicht weit verbreitet.
Mike Sherrill 'Cat Recall'
0

Ich arbeite in einem ähnlichen Projekt. Dies ist mein Entwurfsvorschlag:

  1. Kommentieren Sie DB-Objekte regelmäßig, beispielsweise alle zwei Wochen oder zweimal im Monat.
  2. mache pg_dump all (ja, hol dir alles, um sicherzustellen, dass du alle kleinen Details und Beziehungen bekommst). Nennen Sie sie mit yyyymmdd-VERSION.dump
  3. Wenn Sie Git verwenden, verwenden Sie ein Plugin für große Dateien
  4. Wenn Sie kein Repo verwenden, erstellen Sie eine einfache Tabelle im CSV-Textformat wie in der folgenden Tabelle:

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. Indem Sie eine Beziehung in der CSV-Datei der generierten Speicherauszüge nach Dateinamen beibehalten, können Sie diese auf einfache Weise verfolgen und sicherstellen, dass die Wiederherstellung funktioniert, da Sie absolut alles gesichert haben.

Heutzutage sollte jeder Cloud-Speicher oder Speicher vor Ort nicht so teuer sein, selbst wenn es um TBs von Daten geht. Es gibt einige Wutanfälle von 700 bis 1000 USD mit bis zu 16 TB .

Sie können sogar viel mehr Geld sparen, wenn Sie in eine Speicherwolke wie die beliebteste AWS S3 wechseln

Wenn die Standards eines guten Designs und einer guten Organisation definiert werden, um die gesamte IT-Infrastruktur und die Ressourcen im Auge zu behalten, sollte dies nach der Implementierung nicht schmerzhaft sein. Dies kann relativ einfach sein und spart Ihnen Konfigurationsprobleme und vor allem Zeit ...

Andres Leon Rangel
quelle