fix(dokuwiki): Verbessertes Pre-Migration-Script mit robuster Fehlerbehandlung
- Explizite Commits nach jeder ALTER TABLE Operation - Besseres Logging mit Statusmeldungen - Verifizierung nach Migration - Fehlerbehandlung mit detaillierten Fehlermeldungen - Prüfung ob maintenance_equipment Tabelle existiert
This commit is contained in:
parent
0d27ca36b0
commit
85a90f90fd
|
|
@ -1,11 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Pre-Migration Script für open_workshop_dokuwiki 18.0.2.0.0
|
||||
Pre-Migration Script für open_workshop_dokuwiki 18.0.2.1.0
|
||||
|
||||
Fügt die neuen Felder wiki_status_id und wiki_doku_id zur Datenbank hinzu,
|
||||
BEVOR die Views validiert werden.
|
||||
|
||||
Dieses Script wird automatisch vor dem Upgrade ausgeführt.
|
||||
Dieses Script wird automatisch vor dem Upgrade von 18.0.2.0.0 auf 18.0.2.1.0 ausgeführt.
|
||||
"""
|
||||
import logging
|
||||
|
||||
|
|
@ -18,39 +18,91 @@ def migrate(cr, version):
|
|||
|
||||
Args:
|
||||
cr: Database cursor
|
||||
version: Aktuelle Version vor dem Upgrade
|
||||
version: Aktuelle Version vor dem Upgrade (sollte 18.0.2.0.0 sein)
|
||||
"""
|
||||
_logger.info("=== Pre-Migration: Füge wiki_status_id und wiki_doku_id Felder hinzu ===")
|
||||
_logger.info("=" * 80)
|
||||
_logger.info("PRE-MIGRATION SCRIPT: open_workshop_dokuwiki 18.0.2.1.0")
|
||||
_logger.info("Aktuelle Version: %s", version)
|
||||
_logger.info("=" * 80)
|
||||
|
||||
# Prüfe ob die Felder bereits existieren
|
||||
cr.execute("""
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'maintenance_equipment'
|
||||
AND column_name IN ('wiki_status_id', 'wiki_doku_id')
|
||||
""")
|
||||
existing_fields = [row[0] for row in cr.fetchall()]
|
||||
|
||||
# Füge wiki_status_id hinzu falls nicht vorhanden
|
||||
if 'wiki_status_id' not in existing_fields:
|
||||
_logger.info("Füge Spalte wiki_status_id hinzu...")
|
||||
try:
|
||||
# Prüfe ob die Tabelle maintenance_equipment existiert
|
||||
cr.execute("""
|
||||
ALTER TABLE maintenance_equipment
|
||||
ADD COLUMN wiki_status_id VARCHAR
|
||||
SELECT EXISTS (
|
||||
SELECT FROM information_schema.tables
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'maintenance_equipment'
|
||||
)
|
||||
""")
|
||||
_logger.info("✓ wiki_status_id hinzugefügt")
|
||||
else:
|
||||
_logger.info("wiki_status_id existiert bereits")
|
||||
|
||||
# Füge wiki_doku_id hinzu falls nicht vorhanden
|
||||
if 'wiki_doku_id' not in existing_fields:
|
||||
_logger.info("Füge Spalte wiki_doku_id hinzu...")
|
||||
table_exists = cr.fetchone()[0]
|
||||
|
||||
if not table_exists:
|
||||
_logger.warning("Tabelle maintenance_equipment existiert nicht - überspringe Migration")
|
||||
return
|
||||
|
||||
_logger.info("Tabelle maintenance_equipment gefunden")
|
||||
|
||||
# Prüfe ob die Felder bereits existieren
|
||||
cr.execute("""
|
||||
ALTER TABLE maintenance_equipment
|
||||
ADD COLUMN wiki_doku_id VARCHAR
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'maintenance_equipment'
|
||||
AND column_name IN ('wiki_status_id', 'wiki_doku_id')
|
||||
""")
|
||||
_logger.info("✓ wiki_doku_id hinzugefügt")
|
||||
else:
|
||||
_logger.info("wiki_doku_id existiert bereits")
|
||||
|
||||
_logger.info("=== Pre-Migration abgeschlossen ===")
|
||||
existing_fields = [row[0] for row in cr.fetchall()]
|
||||
_logger.info("Bereits existierende Felder: %s", existing_fields)
|
||||
|
||||
# Füge wiki_status_id hinzu falls nicht vorhanden
|
||||
if 'wiki_status_id' not in existing_fields:
|
||||
_logger.info("Füge Spalte wiki_status_id hinzu...")
|
||||
cr.execute("""
|
||||
ALTER TABLE maintenance_equipment
|
||||
ADD COLUMN wiki_status_id VARCHAR
|
||||
""")
|
||||
cr.commit() # Wichtig: Commit nach jeder Änderung
|
||||
_logger.info("✓ Spalte wiki_status_id erfolgreich hinzugefügt")
|
||||
else:
|
||||
_logger.info("→ Spalte wiki_status_id existiert bereits, überspringe")
|
||||
|
||||
# Füge wiki_doku_id hinzu falls nicht vorhanden
|
||||
if 'wiki_doku_id' not in existing_fields:
|
||||
_logger.info("Füge Spalte wiki_doku_id hinzu...")
|
||||
cr.execute("""
|
||||
ALTER TABLE maintenance_equipment
|
||||
ADD COLUMN wiki_doku_id VARCHAR
|
||||
""")
|
||||
cr.commit() # Wichtig: Commit nach jeder Änderung
|
||||
_logger.info("✓ Spalte wiki_doku_id erfolgreich hinzugefügt")
|
||||
else:
|
||||
_logger.info("→ Spalte wiki_doku_id existiert bereits, überspringe")
|
||||
|
||||
# Verifiziere dass beide Felder jetzt existieren
|
||||
cr.execute("""
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'maintenance_equipment'
|
||||
AND column_name IN ('wiki_status_id', 'wiki_doku_id')
|
||||
ORDER BY column_name
|
||||
""")
|
||||
final_fields = [row[0] for row in cr.fetchall()]
|
||||
_logger.info("Felder nach Migration: %s", final_fields)
|
||||
|
||||
if len(final_fields) == 2:
|
||||
_logger.info("=" * 80)
|
||||
_logger.info("✓ PRE-MIGRATION ERFOLGREICH ABGESCHLOSSEN")
|
||||
_logger.info("=" * 80)
|
||||
else:
|
||||
_logger.error("!" * 80)
|
||||
_logger.error("FEHLER: Nicht alle Felder wurden hinzugefügt!")
|
||||
_logger.error("Erwartet: ['wiki_doku_id', 'wiki_status_id']")
|
||||
_logger.error("Gefunden: %s", final_fields)
|
||||
_logger.error("!" * 80)
|
||||
|
||||
except Exception as e:
|
||||
_logger.error("!" * 80)
|
||||
_logger.error("FEHLER IM PRE-MIGRATION SCRIPT!")
|
||||
_logger.error("Exception: %s", str(e))
|
||||
_logger.error("!" * 80)
|
||||
raise
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user