Pages: 1
- Sujet précédent - Mise à jour d'une table Postgis avec un identifiant en serial - Sujet suivant
#1 Wed 11 July 2012 09:05
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
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
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
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
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
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
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.
Hors ligne
#8 Thu 12 July 2012 08:06
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
Pages: 1
- Sujet précédent - Mise à jour d'une table Postgis avec un identifiant en serial - Sujet suivant