Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Mon 09 August 2021 17:35

SGREF
Juste Inscrit !
Date d'inscription: 13 Dec 2019
Messages: 3

PgSQL/PostGIS - Sequence & trigger

Bonjour,

En PgSQL, j'aimerai faire appel à plusieurs séquences pour générer un ID.

Quand je dis "plusieurs" je ne sais même pas si cela est possible, je m'explique :

Il s'agit d'une table, contenant des polyognes, utilisée sur QGIS, où il y a continuellement de nouvelles entités.

J'ai besoin de générer une ID automatique qui diffère selon le département où se trouve le nouveau polygone, et qui comprendrait donc le code_insee du département. Concrètement je pensais créer une séquence par département nommée "codeinseedepartement_seq" et aller chercher la "nextval" de la séquence correspondante en récupérant le code insee du département de la nouvelle entité par st_intersects. Le tout dans une trigger function :

Code:

BEGIN
UPDATE projet.test_zone zp set ID = nextval(s2.nom_sequence)
FROM 
(SELECT 
     s1.gid, 
    concat('projet.',s1.code_insee_dep, '_seq') AS nom_sequence
    FROM (SELECT 
             t1.gid,
            t2.code_insee_dep
             FROM projet.test_zone as t1   
            INNER JOIN limite.departement as t2
            ON ST_Intersects(t1.geom,t2.geom)
         )s1
)s2
WHERE zp.gid = NEW.gid;
RETURN NEW;
END;

Mais visiblement ça ne fonctionne pas.

Etant complétement novice en pgsql, je me dis que je suis potentiellement complétement à côté de la plaque, j'en appelle donc à votre aide/imagination.

Merci d'avance pour vos réponses.

Hors ligne

 

#2 Tue 10 August 2021 09:48

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 95

Re: PgSQL/PostGIS - Sequence & trigger

Bonjour,

Essayez plutôt ce type de syntaxe (trigger sur table projet.test_zone) :

$body$
DECLARE code_insee text;

BEGIN

-- on recuperer le code insee du departement
code_insee :=  s1.code_insee_dep FROM limite.departement s1 WHERE st_intersects(st_centroid(NEW.geom), s1.geom);

--On l'injecte dans le NEW.ID

EXECUTE 'SELECT nextval($$'|| code_insee ||'_seq$$)' INTO NEW."ID";


RETURN NEW;
END;
$body$


Bien à vous

Hors ligne

 

#3 Wed 11 August 2021 08:42

SGREF
Juste Inscrit !
Date d'inscription: 13 Dec 2019
Messages: 3

Re: PgSQL/PostGIS - Sequence & trigger

Bonjour,

Merci beaucoup, cela fonctionne à merveille!

Bonne journée à vous.

Hors ligne

 

Pied de page des forums

Powered by FluxBB