From 9b362971713a371e96f6f874c49384d76c1b1d48 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 18 Dec 2025 16:39:34 +0100 Subject: [PATCH] Implement foreign key removal before model synchronization in sequelize.js to prevent conflicts during sync. Add error handling and logging for better visibility on foreign key management. --- backend/utils/sequelize.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/backend/utils/sequelize.js b/backend/utils/sequelize.js index 3d9c387..1b6a84b 100644 --- a/backend/utils/sequelize.js +++ b/backend/utils/sequelize.js @@ -490,6 +490,34 @@ const syncModelsAlways = async (models) => { } } + // Entferne bestehende Foreign Keys vor dem Sync, damit Sequelize sie nicht aktualisiert + try { + const tableName = model.tableName; + const schema = model.schema || model.options?.schema || 'public'; + const foreignKeys = await sequelize.query(` + SELECT tc.constraint_name + FROM information_schema.table_constraints AS tc + WHERE tc.constraint_type = 'FOREIGN KEY' + AND tc.table_name = :tableName + AND tc.table_schema = :schema + `, { + replacements: { tableName, schema }, + type: sequelize.QueryTypes.SELECT + }); + + if (foreignKeys && foreignKeys.length > 0) { + console.log(` ⚠️ Removing ${foreignKeys.length} existing foreign keys from ${model.name} before sync`); + for (const fk of foreignKeys) { + await sequelize.query(` + ALTER TABLE "${schema}"."${tableName}" + DROP CONSTRAINT IF EXISTS "${fk.constraint_name}" + `); + } + } + } catch (fkError) { + console.warn(` ⚠️ Could not remove foreign keys for ${model.name}:`, fkError.message); + } + console.log(` 🔄 Syncing model ${model.name} with constraints: false`); await model.sync({ alter: true, force: false, constraints: false });