Message posté par : Nicolas Ribot
----------------------------------------
S'il s'agit de la requête du fil "répercuter des valeurs d'un segment à
un autre", s'il y a un cycle dans vos données, la recursion ne s'arretera
jamais, la requête non plus => vous remplissez le disque dur dans tous les cas.
Vous pouvez éviter ces récursions infinies en stockant les id déjà rencontrés, et en vous
arrêtant quand vous rencontrez de nouveau le même id:
-----------------
Code :
WITH RECURSIVE walk_network (v19, id_bdcarth, id_nd_ini,id_nd_fin) AS (
select 0,
n.id_bdcarth,
n.id_nd_ini,
n.id_nd_fin,
array[n.id_bdcarth] as ids
from hydro_subset n LEFT JOIN hydro_subset b ON n.id_nd_ini = b.id_nd_fin
WHERE b.id_nd_ini is null
UNION ALL
SELECT
n.v19+ w.v19,
n.id_bdcarth,
n.id_nd_ini,
n.id_nd_fin,
ids || n.id_bdcarth
FROM somme_join n, walk_network w
WHERE w.id_nd_fin = n.id_nd_ini
and not (n.id_bdcarth = any(ids))
) SELECT sum(distinct v19), id_bdcarth
FROM walk_network group by id_bdcarth;
-----------------
Nicolas
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=346497#p346497
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net