osm-labo/clean_duplicate_stats_README.md
2025-07-16 17:00:09 +02:00

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 :

  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 :

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.