osm-labo/clean_duplicate_stats_README.md

62 lines
2.3 KiB
Markdown
Raw Permalink Normal View History

2025-07-16 17:00:09 +02:00
# 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 :
1. Désactiver temporairement la contrainte d'unicité
2. Identifier et supprimer les doublons de villes, en gardant l'entrée la plus ancienne
3. 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 :
```bash
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 :
1. Désactive la contrainte d'unicité `uniq_stats_zone`
2. Crée une table temporaire pour identifier les doublons
3. Utilise `ROW_NUMBER()` pour conserver l'entrée la plus ancienne de chaque groupe de doublons
4. Supprime les doublons identifiés
5. Réactive la contrainte d'unicité
6. 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.