Wie nehmen Sie Schemaänderungen an einer Live-Datenbank ohne Ausfallzeit vor?
Nehmen wir zum Beispiel an, ich habe eine PostgreSQL-Datenbank mit einer Tabelle, die verschiedene Benutzerdaten wie E-Mail-Adressen usw. enthält, die jeweils bestimmten Benutzern zugeordnet sind. Wenn ich die E-Mail-Adressen in eine neue dedizierte Tabelle verschieben wollte, musste ich das Schema ändern und dann die E-Mail-Daten in die neue Tabelle migrieren. Wie kann dies geschehen, ohne die Schreibvorgänge an der Originaltabelle anzuhalten? Sicher, während Daten von der alten in die neue Tabelle geschrieben werden, werden neue Daten weiterhin in die alte Tabelle geschrieben und übersehen, oder?
Ich denke, dieses Problem tritt ziemlich häufig auf, aber ich kann keine Standardlösung finden, um damit umzugehen.
Dieser Artikel befasst sich mit dem Problem, aber ich habe Schritt 3 nicht wirklich verstanden. Er sagt, er solle in beide Tabellen schreiben und dann alte Daten von der ersten in die neue Tabelle migrieren. Wie stellen Sie sicher, dass Sie nur alte Daten migrieren?
(Ich benutze PostgreSQL auf Heroku .)
quelle
Antworten:
Sie haben fast schon Ihre Antwort:
Verwenden Sie für Schritt 3 Folgendes (in einer Transaktion):
Fügen Sie ein, was noch nicht da ist:
Aktualisieren Sie, was sich in der Zwischenzeit geändert hat:
Neue Daten werden nicht berührt, da sie an beiden Stellen identisch sind.
quelle