-
Notifications
You must be signed in to change notification settings - Fork 0
Datenbank und Migrationen
-
DATABASE_URList die privilegierte Verbindung für Alembic. -
APP_DATABASE_URList die eingeschränkte Laufzeitverbindung des Haupt-Backends. -
ABGABEBOX_DATABASE_URLverwendet die stark eingeschränkte Rollehocx_abgabebox.
Migrationen dürfen Berechtigungen der Laufzeitrollen nicht versehentlich erweitern.
Im laufenden Entwicklungs-Stack:
docker compose -p hocx-dev exec backend \
alembic revision --autogenerate -m "kurze_beschreibung"Die generierte Datei unter backend/alembic/versions/ muss immer manuell geprüft werden.
Autogenerate erkennt keine fachlichen Backfills, sicheren Rollout-Reihenfolgen oder
gewünschten Rollenrechte.
docker compose -p hocx-dev exec backend alembic current
docker compose -p hocx-dev exec backend alembic heads
docker compose -p hocx-dev exec backend alembic upgrade head
./scripts/test.sh backend
bash scripts/tests/test_release_config.shDie CI führt alembic upgrade head zusätzlich gegen eine vollständig frische
PostgreSQL-16-Datenbank aus.
- Jede Schemaänderung erhält eine Alembic-Migration.
- Runtime-Code darf Tabellen oder Spalten nicht beim Start erzeugen.
- Constraints und Indizes werden explizit benannt.
- Fremdschlüssel und häufige Tenant-/Sortierabfragen erhalten passende Indizes.
- Neue mandantenbezogene Tabellen tragen
tenant_idoder besitzen eine eindeutig tenant-gescopte Beziehung. - Datenmigrationen sind deterministisch und wiederholbar zu prüfen.
- Grosse Backfills werden in Batches oder kontrollierten Schritten ausgeführt.
- Rollen/GRANTs der Hauptanwendung und Abgabebox werden mitgetestet.
Riskante Änderungen werden über zwei Releases verteilt:
- neue Spalte/Tabelle ergänzen und Code kompatibel mit alt und neu ausrollen;
- Daten backfillen und verifizieren;
- Leser auf das neue Schema umstellen;
- erst in einem späteren Release alte Spalten/Constraints entfernen.
Ein Code-Rollback kann eine destruktive Migration nicht rückgängig machen. Vor jedem Deployment wird deshalb ein Datenbankbackup erstellt; Restore steht im Deployment-Runbook.
- interne Primärschlüssel bleiben intern;
- APIs verwenden
public_id; - Geldwerte verwenden
Numeric/Decimal, nicht Float-Persistenz; - Zeitpunkte werden eindeutig und timezone-bewusst behandelt;
- Unique-Constraints sichern fachliche Eindeutigkeit auch bei Nebenläufigkeit;
- konkurrierende Buchungs-/Quota-Abläufe verwenden Locks oder atomare SQL-Operationen.
Mindestens prüfen:
- Upgrade von der vorherigen Revision;
- Upgrade einer leeren Datenbank bis
head; - vorhandene Daten nach einem Backfill;
- Constraints und Indizes;
- Laufzeitzugriff mit
hocx_app; - erlaubte und verbotene Aktionen mit
hocx_abgabebox; - Anwendungstest für das geänderte Verhalten.
Produktive Migrationen werden nicht nachträglich verändert. Korrekturen erfolgen in einer neuen Revision.
- Startseite
-
Entwicklerdokumentation
- Entwickler-Onboarding
- Architektur
- Big Picture
- Code-Architektur
- API-Konventionen
- Datenbank und Migrationen
- Platform-Admin-Panel
- Mandanten-Export und -Import
- Testprozess
- Konfiguration
- Debugging und Observability
- Beitragen und Qualität
- Dokumentationspflege
- Deployment-Runbook
- Sicherheit
- Bekannte offene Punkte