Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Les cellules vides ne sont pas reconnues lors de l'importation (avec un COPY) d'une table.
Si je mets au niveau de la variable ex : UNITE varchar(4) NULL -> alors, il n'y a plus d'erreur.
Mais pourquoi est-ce que PGS ne veut pas reconnaître automatiquement les cases NULL ? D'habitude, il n'y a pas ce problème.
Merci, cdt
Hors ligne
Un exemple de script et l'erreur générée seraient une bonne idée pour qu'on puisse reproduire le problème.
Guillaume.
Hors ligne
Création de table :
CREATE TABLE NOMSCHEMA.NOMTABLE (
(autres variables)
VOLUME real,
UNITE varchar(4) NULL
);
COPY NOMSCHEMA.NOMTABLE FROM 'chemin/MONFICHIER.csv' with delimiter ';'
=> Message :
ERREUR: syntaxe en entrée invalide pour le type real : « »
CONTEXT: COPY dest, ligne 21, colonne volume : « »
********** Erreur **********
ERREUR: syntaxe en entrée invalide pour le type real : « »
État SQL :22P02
Contexte : COPY dest, ligne 21, colonne volume : « »
RQ : suite à la même erreur, j'ai rajouté le NULL à UNITE, et il n'y avait plus d'erreur. Mais ensuite, c'est sur VOLUME l'erreur, d'où ma venue sur le forum.
Dernière modification par databaser (24/04/2017 14:23:54)
Hors ligne
Pour pouvoir le reproduire, il faudrait au moins avoir le contenu du fichier chemin/MONFICHIER.csv.
Je suppose néanmoins qu'il n'y a rien dans la colonne en question. Le fichier CSV dont contenir \N pour une valeur nulle.
Guillaume.
Hors ligne
si, il y a plus de valeurs que de NULL.
Je peux vous envoyer un fichier exemple, mais je ne sais pas comment on fait pour le télécharger avec le post ?
Vous verrez qu'il y a deux cellules vides.
/N ? Cela signifie que je mets la lettre "N" dans les cellules ? Je n'ai jamais eu de problème avec des CSV...
Dernière modification par databaser (24/04/2017 14:47:29)
Hors ligne
Pas besoin de télécharger le fichier entier. Juste coller ici la ligne qui pose problème. Et en effet, il faut mettre \N dans les cellules sans informations (\, pas /). Si vous n'avez pas eu de problème avant, c'est soit que c'était une colonne texte (et non pas real comme ici, ou int4 ou boolean, etc).
Guillaume.
Hors ligne
Dans le fichier que vous venez de m'envoyer, on voit bien que la colonne O ne contient pas d'informations pour les deux dernières lignes (21 et 22). La commande COPY reçoit donc un élément vide et il ne sait pas comment convertir un élément vide en une donnée de type real. Évidemment, il pourrait décider que c'est un NULL mais si la colonne est de type char, varchar ou text, comment pourrait-il faire la différence entre une chaîne vide et une valeur NULL ? donc il prend la valeur qui est donnée. Si c'est un \N, il sait que c'est un NULL. Si ce n'est pas un \N, il prend la valeur telle quelle. Bref, faut mettre des \N quand il s'agit d'un NULL.
Guillaume.
Hors ligne
Je vous ai envoyé le fichier par mail...
J'ai remplacé par \N. Effectivement, il n'y a pas de retour d'erreur.
Voici les lignes : j'ai mis deux colonnes et plusieurs lignes : il y a deux colonnes : la ligne 21 citée dans l'erreur = 1ère colonne et 3ème ligne de mon copier-coller.
(Rq : Il y a aussi d'autres cellules vides dans la colonne 2 : 1ère ligne)
1
6000 m2
m3
t
Merci,
Hors ligne
merci beaucoup pour votre solution.
autre point : ce fichier est vraiment bizarre car à chaque fermeture, il demande "Enregistrer sous" alors qu''il s'agit juste d'enregistrer les modifications et de fermer.
Hors ligne
Pages : 1