# Eine Spalte ersetzen, ohne den Dienst anzuhalten Typ: Checkliste Herkunft: database-administration-basics / schema-change-management / database-schema-expand-contract-sequence Version: database-schema-expand-contract-sequence-2026-09-12 Geprüft: 2026-09-12 ACHTUNG: Dieses Dokument ist ein Lernartefakt aus einer Schulungssequenz. Es ist kein produktives Runbook. Vor jeder Anwendung in einer realen Umgebung müssen die Schritte gegen lokale Dokumentation, Runbooks und Freigabestatus geprüft werden. ## Szenario Die Spalte `kundennr` soll durch die breitere `kunden_id` ersetzt werden. Die Anwendung läuft rund um die Uhr, und während jeder Auslieferung sind alte und neue Fassung eine Zeit lang gleichzeitig aktiv. ## Schritte 1. Die neue, nullbare Spalte hinzufügen — die alte Fassung merkt nichts davon 2. Eine Anwendungsfassung ausliefern, die auf beide Spalten schreibt und aus der alten liest 3. Den Bestand in Portionen nachziehen, außerhalb der Strukturänderung 4. Eine Anwendungsfassung ausliefern, die aus der neuen Spalte liest 5. Abwarten, bis keine Instanz der alten Fassung mehr läuft 6. Die alte Spalte entfernen ## Begründung Warum: Jeder Schritt muss für sich allein lauffähig sein, weil zwischen zwei Schritten beliebig viel Zeit vergehen kann — und weil jeder Schritt der letzte sein könnte, wenn die Auslieferung abgebrochen wird. Das doppelte Schreiben ist dabei kein Umweg, sondern der Mechanismus, der den Rückweg offen hält. Folgen: **+** Zu keinem Zeitpunkt gibt es einen Stillstand, und bis zum letzten Schritt ist jede Stufe zurücknehmbar. **−** Der Weg dauert mehrere Releases und hält das Schema wochenlang doppelt — und der letzte Schritt bringt nichts Sichtbares, weshalb er regelmäßig liegen bleibt und die Altlast dauerhaft wird. ## Quellen 1. https://www.postgresql.org/docs/current/sql-altertable.html 2. https://www.postgresql.org/docs/current/indexes-intro.html