pgroll ist ein Open-Source-Befehlszeilen-Tool, das für PostgreSQL sichere und reversible Schema-Migrationen bietet, indem mehrere Schema-Versionen gleichzeitig bedient werden. Es kümmert sich um die komplexen Migrationsvorgänge, um sicherzustellen, dass die Clientanwendungen weiter funktionieren, während das Datenbankschema aktualisiert wird. Dazu gehört, dass sichergestellt wird, dass Änderungen angewendet werden, ohne die Datenbank zu sperren, und dass sowohl alte als auch neue Schema -Versionen gleichzeitig funktionieren (selbst wenn Veränderungen vorgenommen werden!). Dies beseitigt Risiken im Zusammenhang mit Schema -Migrationen und vereinfacht die Rollout für die Kundenanwendung erheblich und ermöglicht auch sofortige Rollbacks.
Weitere Informationen zu den von pgroll gelösten Problemen finden Sie im Einführungsblog -Beitrag.
pgroll erstellt virtuelle Schemas, indem sie Ansichten über den physischen Tabellen verwenden. Dies ermöglicht die Durchführung aller erforderlichen Änderungen, die für eine Migration erforderlich sind, ohne die bestehenden Clients zu beeinflussen.

pgroll folgt einem Expand/Contract -Workflow. Bei Migrationsstart führt es alle additiven Änderungen durch (erstellen Sie Tabellen, Fügen Sie Spalten usw.) im physischen Schema, ohne es zu brechen.
Wenn in einer Spalte eine Bruchänderung erforderlich ist, wird eine neue Spalte im physischen Schema erstellt und sie aus der alten Spalte zurückzufassen. Konfigurieren Sie auch Auslöser, um sicherzustellen, dass alle in die alte/neue Spalte während des gesamten aktiven Migrationszeitraums an sein Gegenstück weitergegeben werden. Die neue Spalte wird dann in der neuen Version des Schemas freigelegt.
Sobald die Startphase abgeschlossen ist, ist die neue Schema -Version fertig und greift alle Ansichten auf die richtigen Tabellen und Spalten ab. Client -Anwendungen können dann auf die neue Schema -Version zugreifen, während die alte noch verfügbar ist. Dies ist der Moment, um die neue Version der Client -Anwendung auszuschließen.

Wenn keine Clientanwendungen mehr die alte Schema -Version verwenden, kann die Migration abgeschlossen werden. Dadurch wird das alte Schema entfernt, und das neue wird das einzige sein. Tabellen und Spalten werden nicht mehr benötigt (es werden zu diesem Zeitpunkt kein Client verwendet), und die neuen werden in ihren endgültigen Namen umbenannt. Client -Anwendungen funktionieren in dieser Phase weiterhin, da die Ansichten weiterhin die richtigen Tabellen und Spalten abbilden.
Binärdateien sind für Linux, MacOS & Windows verfügbar und überprüfen unsere Veröffentlichungen.
Führen Sie den folgenden Befehl aus, um pgroll aus der Quelle zu installieren:
go install github.com/xataio/pgroll@latestHinweis: Erfordert GO 1.23 oder höher.
Führen Sie den folgenden Befehl aus, um pgroll mit Homebrew zu installieren:
# macOS or Linux
brew tap xataio/pgroll
brew install pgroll Befolgen Sie diese Schritte, um Ihre erste Schema -Migration mit pgroll durchzuführen:
pgroll muss einen internen Zustand in der Datenbank speichern. Eine Tabelle wird erstellt, um die aktuelle Schemaversion zu verfolgen und die Versionsverlauf zu speichern. Führen Sie den folgenden Befehl aus, um die Datenbank vorzubereiten:
pgroll init --postgres-url postgres://user:password@host:port/dbname Erstellen Sie eine Migrationsdatei. Sie können den Beispiel -Ordner für einige Beispiele überprüfen. Verwenden Sie beispielsweise diese Migrationsdatei, um eine neue customers zu erstellen:
{
"name" : " initial_migration " ,
"operations" : [
{
"create_table" : {
"name" : " customers " ,
"columns" : [
{
"name" : " id " ,
"type" : " integer " ,
"pk" : true
},
{
"name" : " name " ,
"type" : " varchar(255) " ,
"unique" : true
},
{
"name" : " bio " ,
"type" : " text " ,
"nullable" : true
}
]
}
}
]
}Führen Sie dann den folgenden Befehl aus, um die Migration zu starten:
pgroll --postgres-url postgres://user:password@host:port/dbname start initial_migration.jsonDadurch wird eine neue Schema -Version in der Datenbank erstellt und die Migrationsvorgänge angewendet (erstellen Sie eine Tabelle). Nach Abschluss dieses Befehls ist sowohl die alte Version des Schemas (ohne Kundentabelle) als auch die neue (mit der Kundentabelle) gleichzeitig zugänglich.
Nach dem Start einer Migration können Clientanwendungen die neue Schema -Version verwenden. Dazu müssen sie konfiguriert werden, um darauf zuzugreifen. Dies kann durch Einstellen des search_path auf den neuen Schema -Versionsnamen (bereitgestellt von pgroll start -Ausgabe) durchgeführt werden, zum Beispiel:
SET search_path TO ' public_initial_migration ' ;Sobald keine Client -Anwendungen mehr mit der alten Schemaversion vorhanden sind, kann die Migration abgeschlossen werden. Dadurch wird das alte Schema entfernt. Führen Sie den folgenden Befehl aus, um die Migration zu vervollständigen:
pgroll --postgres-url postgres://user:password@host:port/dbname completeZu jedem Zeitpunkt während einer Migration kann es auf die vorherige Version zurückgeführt werden. Dadurch werden das neue Schema entfernt und das alte so wie vor Beginn der Migration gelassen. Um eine Migration zu rollen, führen Sie den folgenden Befehl aus:
pgroll --postgres-url postgres://user:password@host:port/dbname rollbackFür fortgeschrittenere Nutzung, Tutorials und detaillierte Optionen finden Sie in den Leitfäden und Referenzen in der Dokumentation.
Einige Performance -Benchmarks werden in jedem Commit to main ausgeführt, um die Leistung im Laufe der Zeit zu verfolgen. Jeder Benchmark wird gegen Postgres 14,8, 15,3, 16,4, 17.0 und "Last" durchgeführt. Jede Zeile in der Tabelle repräsentiert die Anzahl der Zeilen, gegen die der Benchmark gegen 10 km, 100k und 300.000 Reihen ausgeführt wurde.
Backfill: Zeilen/s, um eine Textspalte mit dem placeholder zu erfüllen. Wir verwenden unsere Standard -Batching -Strategie von 10 km Zeilen pro Stapel ohne Backoff.WriteAmplification/NoTrigger: Basiszeilen/s beim Schreiben von Daten in eine Tabelle ohne pgroll -Auslöser.WriteAmplification/WithTrigger: Zeilen/s beim Schreiben von Daten in eine Tabelle, wenn ein pgroll -Auslöser eingerichtet wurde.ReadSchema: Überprüft die Anzahl der Ausführungen pro Sekunde der Funktion read_schema , die eine Kernfunktion ist, die häufig während der Migrationen ausgeführt wird.Sie können hier gesehen werden.
Wir begrüßen Beiträge aus der Community! Wenn Sie zu pgroll beitragen möchten, befolgen Sie bitte die folgenden Richtlinien:
Für dieses Projekt verpflichten wir uns, auf eine Weise zu handeln und zu interagieren, die zu einer offenen, einladenden, vielfältigen, integrativen und gesunden Gemeinschaft beiträgt.
Dies ist eine Liste von Projekten und Artikeln, die als Inspiration geholfen haben oder auf andere Weise pgroll ähneln:
Dieses Projekt ist unter der Apache -Lizenz 2.0 lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Wenn Sie Fragen haben, Fragen begegnen oder Hilfe benötigen, öffnen Sie ein Problem in diesem Repository, und unsere Discord treten bei, und unsere Community wird gerne helfen.
Gemacht mit ❤️ von xata?