mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
60 lines
2.2 KiB
SQL
60 lines
2.2 KiB
SQL
-- 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;
|