feat: enhance database migration handling and media asset tags
All checks were successful
Deploy Development / deploy (push) Successful in 36s
Test Suite / pytest-backend (push) Successful in 29s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 30s
Test Suite / pytest-backend (pull_request) Successful in 23s
Test Suite / lint-backend (pull_request) Successful in 0s
Test Suite / build-frontend (pull_request) Successful in 6s
Test Suite / playwright-tests (pull_request) Successful in 23s
All checks were successful
Deploy Development / deploy (push) Successful in 36s
Test Suite / pytest-backend (push) Successful in 29s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 30s
Test Suite / pytest-backend (pull_request) Successful in 23s
Test Suite / lint-backend (pull_request) Successful in 0s
Test Suite / build-frontend (pull_request) Successful in 6s
Test Suite / playwright-tests (pull_request) Successful in 23s
- Updated migration scripts to ensure idempotency and safe execution of SQL statements, preventing errors on repeated runs. - Improved documentation in migration files to clarify the execution order and idempotent practices for database migrations. - Added a comment in main.py to explain the migration process and its conditional execution based on the SKIP_DB_MIGRATE environment variable.
This commit is contained in:
parent
a8667f4757
commit
4f64cb105b
|
|
@ -33,6 +33,7 @@ def _health_ready_public_detail_enabled() -> bool:
|
||||||
|
|
||||||
|
|
||||||
# Run database migrations before API start — halbes Schema ist schlimmer als kein Start
|
# Run database migrations before API start — halbes Schema ist schlimmer als kein Start
|
||||||
|
# (run_migrations: pending *.sql in einer Transaktion pro Datei, Buchführung schema_migrations)
|
||||||
# Lokal ohne DB / nur Tests: SKIP_DB_MIGRATE=1
|
# Lokal ohne DB / nur Tests: SKIP_DB_MIGRATE=1
|
||||||
if os.getenv("SKIP_DB_MIGRATE", "").strip().lower() in ("1", "true", "yes"):
|
if os.getenv("SKIP_DB_MIGRATE", "").strip().lower() in ("1", "true", "yes"):
|
||||||
print("[SKIP_DB_MIGRATE] Migrationen uebersprungen (nur fuer Entwicklung ohne DB)")
|
print("[SKIP_DB_MIGRATE] Migrationen uebersprungen (nur fuer Entwicklung ohne DB)")
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
-- Migration 046: Schlagwörter (tags) für media_assets — Suche & Filter in der Medienbibliothek.
|
-- Migration 046: Schlagwörter (tags) für media_assets — Suche & Filter in der Medienbibliothek.
|
||||||
|
--
|
||||||
|
-- Einordnung: läuft nach 045 (media_assets existiert). Idempotent:
|
||||||
|
-- • wird pro Umgebung höchstens einmal über schema_migrations ausgeführt;
|
||||||
|
-- • dieselben Statements sind bei Wiederholung harmlos (IF NOT EXISTS).
|
||||||
ALTER TABLE media_assets
|
ALTER TABLE media_assets
|
||||||
ADD COLUMN IF NOT EXISTS tags TEXT[] NOT NULL DEFAULT '{}';
|
ADD COLUMN IF NOT EXISTS tags TEXT[] NOT NULL DEFAULT '{}';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,17 @@
|
||||||
"""
|
"""
|
||||||
Shinkan Jinkendo — Datenbank-Migrationen
|
Shinkan Jinkendo — Datenbank-Migrationen
|
||||||
|
|
||||||
**Idempotent** über `schema_migrations`: jede numerische Datei `migrations/*.sql` höchstens einmal
|
**Deployment:** Beim Start importiert `main.py` dieses Modul und ruft `main()` auf, bevor FastAPI
|
||||||
als „erfolgreich“ eingetragen; bei erneutem Start werden nur noch fehlende Dateien abgearbeitet.
|
die App lädt (`SKIP_DB_MIGRATE=1` nur für Tests oder ohne DB). Jeder Backend-Container-Start
|
||||||
|
wendet ausstehende Migrationen an — kein separater Deploy-Schritt nötig.
|
||||||
|
|
||||||
|
**Idempotent (Runner):** Über `schema_migrations` wird jede Datei `NNN_*.sql` höchstens einmal
|
||||||
|
als erfolgreich markiert; wiederholte Starts führen nur noch fehlende Dateien aus.
|
||||||
|
|
||||||
|
**Idempotent (SQL, empfohlen):** `IF NOT EXISTS`, `ADD COLUMN IF NOT EXISTS`, `CREATE INDEX IF NOT EXISTS`,
|
||||||
|
damit ein erneuter Lauf derselben Datei harmlos bleibt. Ohne diese Guards schützt nur der
|
||||||
|
`schema_migrations`-Eintrag; ältere Migrationen ohne IF NOT EXISTS können bei manuell gelöschtem
|
||||||
|
Eintrag und bestehenden Tabellen fehlschlagen.
|
||||||
|
|
||||||
**Reihenfolge:** Alle `NNN_*.sql` nach führender Zahl (001 vor 009 vor 010 …), bei gleicher Zahl
|
**Reihenfolge:** Alle `NNN_*.sql` nach führender Zahl (001 vor 009 vor 010 …), bei gleicher Zahl
|
||||||
alphabetisch nach Dateinamen — nicht bloß String-Sortierung (vermeidet z. B. `10_` vor `9_`).
|
alphabetisch nach Dateinamen — nicht bloß String-Sortierung (vermeidet z. B. `10_` vor `9_`).
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user