Message posté par : T. Rossini
----------------------------------------
-----------------
ppluvinet écrit :
Le WITH RECURSIVE de tumasgiu fonctionne mais il est long
-----------------
Helas c'était à craindre.
-----------------
ppluvinet écrit :
il faudrait mettre une valeur bien plus importante au LIMIT.
-----------------
Vous pouvez tout à fait augmenter le nombe d'enregistrement à retourner. Le limit
n'est la que pour vous prémunir d'une possible requête qui ne terminerait jamais
et saturerait votre serveur.
Votre code est bien, mais je pense que vous pouvez le simplifier comme suit (non testé)
:
-----------------
Code :
CREATE OR REPLACE function diffusion() returns text
LANGUAGE plpgsql
AS $$
DECLARE
re text default '';
updated := 1
NBPOLYUPDATED INT := 0;
BEGIN
WHILE updated > 0 LOOP
RAISE NOTICE 'i: %', i;
execute 'update poly a
set attr = b.attr
from poly b
where a.attr is null and b.attr is not null and st_intersects(a.geom,b.geom)'
;
GET DIAGNOSTICS updated = ROW_COUNT ;
--https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-DIAGNOSTICS
NBPOLYUPDATED := updated + NBPOLYUPDATED ;
END LOOP;
re := 'NB TOTAL UPDATED: '|| NBPOLYUPDATED ;
return re;
END;
$$
;
select diffusion();
-----------------
Il n'y a plus qu'a tester la version de Nicolas :)
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=370421#p370421
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