#1 Thu 10 September 2009 15:29
- topoman
- Participant occasionnel
- Date d'inscription: 22 Apr 2009
- Messages: 19
shape vers table postgis avec contraintes
Bonjour,
Je teste actuellement FME 2009. Mon problème est le suivant :
- je dispose d'un fichier shape (polygone) et je souhaite mettre à jour une table postgis avec ce fichier.
- cette table dispose de deux contraintes :
Code:
CONSTRAINT pk_diag_raison PRIMARY KEY (object_id) USING INDEX TABLESPACE tbsp_sig2, CONSTRAINT diag_raison_id_bdcarto_fkey FOREIGN KEY (id_bdcarto) REFERENCES ign.commune (id_bdcarto) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION,
comment spécifier à FME lors de l'import : l'attribut "object_id" qui provient de la tablespace et l'attribut "id_bdcarto" qui lui provient d'une requête spatiale (obtenir l'attribut id_bdcarto de la commune dans laquelle le polygone se trouve) car ces deux attributs ne sont pas présents dans le fichier shape à importer.
Merci par avance pour vos conseils.
Hors ligne
#2 Thu 10 September 2009 15:59
- Thomas KOCHERT
- Participant occasionnel
- Lieu: Nancy
- Date d'inscription: 7 Nov 2005
- Messages: 11
- Site web
Re: shape vers table postgis avec contraintes
Bonjour,
si vous disposez localement de la BD Carto, vous pouvez faire un InsidePointReplacer sur vos polygones puis PointOnAreaOverlayer sur la BD Carto pour récupérer son id.
pour la clé primaire de votre table, c'est plus compliqué :
- soit la colonne clé est de type serial dans PostGis (ou utilise une séquence d'entiers ce qui revient au même), laissez l'attribut vide dans FME, définissez son type à 'serial', et mettez le paramètre du writer 'autoriser l'écriture des attributs serial' à 'NON'. La colonne sera remplie par PostGis au moment du chargement,
- soit ce n'est pas le cas et dans ce cas vous devez générer la clé au niveau de FME. Une solution est de récupérer le numéro du dernier indice présent dans PostGis puis d'utiliser Counter pour générer les clés
Cordialement,
Th.K.
Thomas Kochert
Responsable SIG DT Lorraine - Office National des Forêts
Une petite carte vaut mieux qu'un long discours... alors... au travail !
Hors ligne
#3 Thu 10 September 2009 17:51
- topoman
- Participant occasionnel
- Date d'inscription: 22 Apr 2009
- Messages: 19
Re: shape vers table postgis avec contraintes
bon, j'ai récupéré l'ID de la BD carto puis pour l'object_id j'ai laissé l'attribut vide dans FME, mis son type à 'serial', l'écriture des attributs serial' à 'NON'.
résultat : colonne "object_id" viole la contrainte NOT NUL
je vais tester votre deuxième solution, mais je ne trouve pas l'info sur le numéro du dernier indice présent dans postgis ?
encore un grand merci pour votre réponse
bonne soirée
Hors ligne
#4 Thu 10 September 2009 18:02
- Sarah - VEREMES
- Participant actif
- Date d'inscription: 21 Apr 2009
- Messages: 51
Re: shape vers table postgis avec contraintes
Pour récupérer le numéro du dernier indice, il faut utiliser une requête SQL dans le Transformer SQLExecutor.
requête SQL : select (max(ATTRIBUT) + 1) as MAX from TABLE
où dans votre cas, ATTRIBUT = object_id.
Sarah MOURE
Veremes : support FME & version française
Hors ligne
#5 Thu 10 September 2009 20:20
- topoman
- Participant occasionnel
- Date d'inscription: 22 Apr 2009
- Messages: 19
Re: shape vers table postgis avec contraintes
ok, très simple ... mais j'avais un doute car les indices ne se suivent pas mais sont dans un ordre croissant ! est-ce normal ?
A noté que je dispose de plusieurs tables spatiales qui disposent de cet indice. ne faut-il pas trouver l'indice le plus grand dans toute la BD ?
Je teste cela demain je vous tiens au courant.
merci.
Hors ligne
#6 Fri 11 September 2009 12:30
- topoman
- Participant occasionnel
- Date d'inscription: 22 Apr 2009
- Messages: 19
Re: shape vers table postgis avec contraintes
tout fonctionne !!!!
récapitulatif :
1/ récupération de l'id_bdcarto à l'aide des transformers : InsidePointReplacer puis PointOnAreaOverlayer
2/ création de l'object_id à l'aide des transformers : SQLExecutor puis COUNTER
Encore merci.
Bon WEEK.
Hors ligne