2.3 KiB
Script de nettoyage des doublons de villes
Ce dossier contient un script SQL pour résoudre le problème de contrainte d'unicité sur le code INSEE des villes dans la table stats
.
Problème
Lorsque vous rencontrez l'erreur suivante :
SQLSTATE[23505]: Unique violation: 7 ERREUR: n'a pas pu créer l'index unique « uniq_stats_zone »
DETAIL: La clé (zone)=(91111) est dupliquée.
Cela signifie qu'il existe des doublons dans la table stats
avec le même code INSEE (colonne zone
), ce qui empêche la création de la contrainte d'unicité.
Solution
Le script clean_duplicate_stats.sql
permet de :
- Désactiver temporairement la contrainte d'unicité
- Identifier et supprimer les doublons de villes, en gardant l'entrée la plus ancienne
- Réactiver la contrainte d'unicité
Comment utiliser le script
Précautions importantes
⚠️ ATTENTION : Ce script supprime des données de la base. Assurez-vous de faire une sauvegarde complète de votre base de données avant de l'exécuter.
Les entités liées aux enregistrements Stats
supprimés (comme CityFollowUp
et 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.
Exécution du script
Pour exécuter le script sur une base PostgreSQL :
psql -U username -d database_name -f clean_duplicate_stats.sql
Remplacez username
par votre nom d'utilisateur PostgreSQL et database_name
par le nom de votre base de données.
Vérification
Le script inclut des requêtes pour :
- Afficher le nombre de doublons qui seront supprimés
- Afficher les détails des doublons avant suppression
- Vérifier qu'il n'y a plus de doublons après l'opération
Fonctionnement technique
Le script :
- Désactive la contrainte d'unicité
uniq_stats_zone
- Crée une table temporaire pour identifier les doublons
- Utilise
ROW_NUMBER()
pour conserver l'entrée la plus ancienne de chaque groupe de doublons - Supprime les doublons identifiés
- Réactive la contrainte d'unicité
- Vérifie qu'il n'y a plus de doublons
Après l'exécution
Une fois le script exécuté avec succès, vous ne devriez plus rencontrer l'erreur de violation de contrainte d'unicité lors de l'exécution des commandes Symfony.