-- Script SQL pour désactiver temporairement la contrainte d'unicité sur l'INSEE de ville, -- supprimer les doublons, et réactiver la contrainte -- ATTENTION: Ce script supprime des enregistrements de la table stats. -- Les entités liées (CityFollowUp, Place) seront également supprimées si des contraintes -- de clé étrangère avec ON DELETE CASCADE sont définies dans la base de données. -- Assurez-vous de faire une sauvegarde de la base de données avant d'exécuter ce script. -- 1. Désactiver temporairement la contrainte d'unicité ALTER TABLE stats DROP CONSTRAINT uniq_stats_zone; -- 2. Identifier et supprimer les doublons, en gardant l'entrée la plus ancienne -- Créer une table temporaire pour stocker les IDs à supprimer CREATE TEMP TABLE stats_to_delete AS WITH duplicates AS ( SELECT id, zone, date_created, ROW_NUMBER() OVER ( PARTITION BY zone ORDER BY -- Garder l'entrée la plus ancienne si date_created existe CASE WHEN date_created IS NOT NULL THEN 0 ELSE 1 END, date_created, -- Si date_created est NULL, utiliser l'ID le plus petit (probablement le plus ancien) id ) AS row_num FROM stats WHERE zone IS NOT NULL ) SELECT id FROM duplicates WHERE row_num > 1; -- Afficher le nombre de doublons qui seront supprimés SELECT COUNT(*) AS "Nombre de doublons à supprimer" FROM stats_to_delete; -- Afficher les détails des doublons qui seront supprimés (pour vérification) SELECT s.id, s.zone, s.name, s.date_created FROM stats s JOIN stats_to_delete std ON s.id = std.id ORDER BY s.zone, s.id; -- 3. Supprimer les doublons -- Note: Nous utilisons DELETE ... USING pour éviter les problèmes de contraintes de clé étrangère DELETE FROM stats USING stats_to_delete WHERE stats.id = stats_to_delete.id; -- 4. Nettoyer la table temporaire DROP TABLE stats_to_delete; -- 5. Réactiver la contrainte d'unicité ALTER TABLE stats ADD CONSTRAINT uniq_stats_zone UNIQUE (zone); -- 6. Vérifier qu'il n'y a plus de doublons SELECT zone, COUNT(*) FROM stats WHERE zone IS NOT NULL GROUP BY zone HAVING COUNT(*) > 1;