From 060ca72eb41832b1588e3a4684ef55546578e1ea Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Mon, 25 May 2026 16:53:58 +0200 Subject: [PATCH] fixed db import transactions --- modules/system/databaseMigration.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/system/databaseMigration.py b/modules/system/databaseMigration.py index d255bde2..645fcab7 100644 --- a/modules/system/databaseMigration.py +++ b/modules/system/databaseMigration.py @@ -743,15 +743,15 @@ def _importSingleDb(payload: dict, dbName: str, mode: str, protectedIds: List[st conn = _getConnection(dbName) try: existingTables = set(_listTables(conn)) + conn.rollback() # Ensure all import tables exist (create missing ones from export schema) + conn.autocommit = True for tableName, rows in tables.items(): if tableName in excluded or not isinstance(rows, list) or not rows: continue if tableName not in existingTables: - conn.autocommit = True _createTableFromExport(conn, tableName, rows) - conn.autocommit = False existingTables.add(tableName) logger.info("Pre-created missing table %s.%s", dbName, tableName) @@ -770,9 +770,9 @@ def _importSingleDb(payload: dict, dbName: str, mode: str, protectedIds: List[st # Phase 1 (replace only): DELETE children first (reverse topological order) if mode == "replace": + conn.autocommit = False for tableName in reversed(importOrder): try: - conn.autocommit = False _deleteNonProtected(conn, tableName, protectedIdSet) conn.commit() except Exception as e: @@ -781,12 +781,13 @@ def _importSingleDb(payload: dict, dbName: str, mode: str, protectedIds: List[st logger.warning("DELETE from %s.%s failed: %s", dbName, tableName, e) # Phase 2: INSERT parents first (topological order) + conn.autocommit = False for tableName in importOrder: try: - conn.autocommit = False rows = tables[tableName] physicalCols = _getPhysicalColumns(conn, tableName) if not physicalCols: + conn.rollback() continue filteredRows = []