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 Wed 11 July 2012 09:05

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Mise à jour d'une table Postgis avec un identifiant en serial

Bonjour,

J’essaie de mettre à jour une table Postgis existante avec FME 2012.

Dans ma table, j'ai un champ geo_id de type serial et je n'ai que des retours d'erreur de violation de la contrainte not null lorsque j’exécute le traitement.

J'ai bien interdit l'écriture d'attribut serial.

En changeant le mode insertion dans Postgis (Copy ou Insert), j'ai toujours la même erreur. FME transmets à chaque fois une valeur null pour mon champ geo_id.

Pour faire le traitement, j'ai importé la définition de ma table. Par contre, si je crée une nouvelle table (simplement en changeant le nom dans Workbench)  et que je l'a mets à jour. Là, tout ce passe correctement.

Alors comment faire pour intégrer mes nouvelles données dans ma table existante ?

Merci d'avance

Christophe

Hors ligne

 

#2 Wed 11 July 2012 10:15

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1019
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Bonjour,

Il s'agit d'intégrer des données dans une table ou de faire des mises à jour de données existantes ?

S'il s'agit de màj, il faut passer le writer en update (màj) puis utiliser par exemple un renamer pour renommer votre champ clé en "fme_where" (on peut aussi utiliser un concatenator si on souhaite construire une clé spécifique. A ce moment là, vous pouvez lancer la màj.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Wed 11 July 2012 11:19

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Bonjour,

C'est pour faire de l'ajout de données à une table existante.  C'est de l'insert que FME fait bien puisque j'ai une commande INSERT dans le log d'erreur.  Mais il passe ma colonne d'identifiant en NULL plutôt que de ne la prendre en compte

Christophe

Hors ligne

 

#4 Wed 11 July 2012 11:26

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1019
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Hum mais vous voulez écrire vous même le serial ou laisser faire FME ?

Si vous voulez l'écrire vous même passez le paramètre écrire les serials à "oui".

Dernière modification par heretik25 (Wed 11 July 2012 12:04)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#5 Wed 11 July 2012 15:29

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Non, justement, je voudrais que PostgreSQL s'occupe de cela.

Je n'ai jamais eu de problème ... Alors je me demande si cela ne viendrais pas de la version 2012 de FME ?

Hors ligne

 

#6 Wed 11 July 2012 16:38

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1019
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Pouvez-vous nous donner la structure de la table afin de savoir s'il s'agit bien d'un champ serial


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#7 Wed 11 July 2012 18:11

ogayte
Participant assidu
Lieu: Saint-Estève
Date d'inscription: 6 Mar 2006
Messages: 658
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

J'ai déjà travaillé sur ce type de problème.
Je vous livre ma réponse d'alors :

Le chargement avec FME fonctionne sur des attributs de type SERIAL.
Par exemple si la structure est :

CREATE TABLE ville
(
  id serial NOT NULL,
  nom character(50),
)
;

Dans ce cas Postgresql crée un séquence utilisée de manière implicite par postgresql (et non par FME comme je le croyais).
La séquence a la forme
<table>_<attribut>_seq, soit
ville_id_seq
dans l'exemple ci-dessus.

Le résultat est exactement le même pour Postgresql et pour fme (qui fonctionne dans ce cas) si la table est créée de la manière suivante (relation explicite avec la séquence) :

CREATE SEQUENCE ville_id_seq;

CREATE TABLE ville
(
  id integer NOT NULL DEFAULT nextval('public.ville_id_seq'::regclass),
  nom character(50)
)
;

Par contre si vous utilisez un nom de séquence différent, par exemple ville_id_seq2, postgresql va déclarer votre attribut id de type Integer et non de type serial.

CREATE SEQUENCE ville_id_seq2;
CREATE TABLE ville
(
  id integer NOT NULL DEFAULT nextval('public.ville_id_seq2'::regclass),
  nom character(50)
)
;


Il faut donc bien faire la différence dans Postgresql entre les attributs de type SERIAL et les attributs de type
Integer NOT NULL avec une valeur par défaut.

Conclusion :
Le type SERIAL est bien supporté par FME.
Les valeurs par défaut ne sont pas supportées (pour les entiers et sans doute pour les autres types) ce qui n'est pas normal, je vais relancer Safe sur ce problème.


Olivier Gayte
http://www.veremes.com
+33 (0)4-68-38-65-27

Hors ligne

 

#8 Thu 12 July 2012 08:06

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: Mise à jour d'une table Postgis avec un identifiant en serial

Bonjour,

Merci pour la réponse.
C'était bien le problème de correspondance du nom de la séquence.
En fait, j'avais modifié le nom de ma table. Du coup, le nom de la séquence ne correspondait plus au nom par défaut.
En renommant correctement ma séquence tout rentre dans l'ordre.

Encore merci

Christophe

Hors ligne

 

Pied de page des forums

Powered by FluxBB