PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/10/2012 20:35:24

Georgie
Membre

Import de données (text et csv)

Bonjour, je débute sur PostGres.

Je tente, sans succès, d'importer des données en fichiers text ou csv dans Postgres.

Je procède basiquement, je crée une table vierge (vu que c'est pour tester, j'ai mis toutes les colonnes en text), puis dans le menu contextuel de pgadmin, clic-droit sur la table, option Importer.
J'ai testé, dans le menu de cette fonction, en text, en csv, avec ou sans intitulés de colonne, mais à chaque fois l'import semble bloquer sur la deuxième colonne, indiquant "données manquantes (dans la deuxième colonne)".

J'ai aussi testé la fonction SQL :

COPY LaTableVierge FROM 'le\chemin\du\fichier\text' delimiter ';';

Mais il est clair que je ne la maîtrise pas...

Arf, c'est très embêtant...Si quelqu'un a quelques pistes...

Quel est, de façon générale, la meilleure façon d'importer des données dans Postgres ?

Merci d'avance !

Dernière modification par Georgie (15/10/2012 22:19:28)

Hors ligne

#2 15/10/2012 21:13:21

rjuju
Administrateur

Re : Import de données (text et csv)

Bonjour,

pouvez-vous donner un exemple de ligne à importer ? Peut-être y a-t-il une différence d'encodage entre le fichier et votre base ?

Sinon, l'instruction COPY se fait côté serveur, donc le fichier doit être sur le système de fichier du serveur, et accessible en lecture par l'utilisateur lançant postgres.

La meilleure façon, du moins la plus rapide, reste l'instruction COPY.

Hors ligne

#3 15/10/2012 22:35:10

Georgie
Membre

Re : Import de données (text et csv)

Un exemple de ligne extraite du fichier texte que je souhaite importer :

BELLEVILLE-1	Belleville	Belleville	54	P'4	3817	1363	1310	1980	1987	1988

Et je ne sais même pas comment mentionner dans l'instruction COPY les tabulations utilisées...
Vous dites que le fichier doit être sur le système de fichier du serveur, qu'entendez-vous par là exactement ?
J'ai bien essayé de mettre le fichier text dans C:\Program Files\PostgreSQL\9.2\data, sans grand espoir, car en effet je ne trouve pas où sont rangé mes objets de bases de données. Mais c'est peut-être de cela que vous parlez.

Hors ligne

#4 15/10/2012 23:20:55

gleu
Administrateur

Re : Import de données (text et csv)

Par défaut, avec l'instruction COPY, c'est une tabulation pour séparer les enregistrements, donc pas la peine de lui donner de délimiteur.


Guillaume.

Hors ligne

#5 16/10/2012 01:33:51

Georgie
Membre

Re : Import de données (text et csv)

J'avoue que je butes toujours sur mes imports... Étonnement, l'import semble bloquer dés qu'il passe au second champ, alors que le premier est la clé primaire de la table vierge, comme s'il acceptait d'importer dans un champ en clé primaire uniquement...

De toute évidence, il me manque encore des notions basique au sujet de l'import, j'ai donc plusiuers questions :
- Est-on obligé de créer des colonnes vides dans une table Postgres avant d'importer des données issues de fichiers text ou Excel ?
- Si oui, quelles sont les grands principes dans la création de ses colonnes qui permettront leur interopérabilité avec les données d'un fichier text ou Excel ?
- Doit-on laisser les intitulés de colonne dans le fichier text ou csv ?
- Où doit-on ranger les fichiers text ou csv que l'on souhaite importer via l'instruction COPY ? J'ai cru comprendre qu'il y avait obligation de les ranger dans un "fichier système", quid de ces fichiers systèmes de Postgres ?

Voilà voilà, dsl !

Hors ligne

#6 16/10/2012 04:34:03

MitsuTomoe
Membre

Re : Import de données (text et csv)

Un exemple concret :
1) création table

CREATE TABLE villes (
    nom_ville character varying(70),
    nom_ville_maj character varying(70),
    codpos character varying(5),
    codcom character varying(5),
    reg character varying(2),
    lat numeric,
    long numeric,
    elg numeric
);

2) import (c'est sur Mac OS X)

copy villes from '/users/alex/Desktop/villes.csv' (delimiter ';');

Une ligne de mon fichier csv (pas de ligne d'entête) :

Ambronay;AMBRONAY;1500;1007;82;46;5.35;1.34

Dernière modification par MitsuTomoe (16/10/2012 04:43:35)

Hors ligne

#7 16/10/2012 04:48:43

MitsuTomoe
Membre

Re : Import de données (text et csv)

Une autre option est de créer un fichier sql de ce style :

COPY communes_cp (libcom, comcp, libdep, codcom, dat_creat, dat_tran, user_intranet_creat, user_intranet_tran, user_db_creat, user_db_tran) FROM stdin;
L ABERGEMENT CLEMENCIAT	01400	AIN	1001	\N	\N	\N	\N	\N	\N
\.

La table concernée :

CREATE TABLE communes_cp (
    libcom character varying(40) NOT NULL,
    comcp character varying(5) NOT NULL,
    libdep character varying(70) NOT NULL,
    codcom character varying(5) NOT NULL,
    dat_creat timestamp without time zone,
    dat_tran timestamp without time zone,
    user_intranet_creat character varying(40),
    user_intranet_tran character varying(40),
    user_db_creat character varying(40),
    user_db_tran character varying(40)
);

Hors ligne

#8 16/10/2012 04:55:31

MitsuTomoe
Membre

Re : Import de données (text et csv)

En relisant les posts, je m'aperçois que vous n'avez pas mis le mot-clef delimiter entre parenthèses .
Ceci serait mieux :

COPY LaTableVierge FROM 'le\chemin\du\fichier\text' (delimiter ';');

Serait-ce votre souci ?

Hors ligne

#9 16/10/2012 09:16:46

Georgie
Membre

Re : Import de données (text et csv)

Je ne penses pas que c'était le delimiter, car comme j'utilisais les tabulations pour séparées, j'ai refait ce script sans le delimiter, sans succès.
Je vais tenter de réimporter en changeant mes champs de la table vierge, qui pour l'instant sont tous en text, et essayer votre technique.

Hors ligne

#10 16/10/2012 14:31:06

gleu
Administrateur

Re : Import de données (text et csv)

Pour vous aider, il nous faudrait la définition de la table, la requête que vous exécutez, la partie du fichier qui montre le problème et le message d'erreur complet et exact. Sans tout cela, il est impossible de vous aider correctement.


Guillaume.

Hors ligne

#11 16/10/2012 14:49:26

meles
Membre

Re : Import de données (text et csv)

Bonjour,
  n'oublions pas aussi que SQL est insensible à la casse, alors le camelcase dans le nom de table, je le sens moyen.

Cordialement

Hors ligne

#12 16/10/2012 16:24:37

Georgie
Membre

Re : Import de données (text et csv)

Ok je retiens tout cela pour la prochaine fois.
En attendant, j'ai résolu mon problème en important directement le shape de mes données, avec l'outils "Shape files and DBF exporter loader", méthode d'import très simple.
Mais j'avoue que l'import d'autres types de données restent assez ardues pour moi...

Hors ligne

Pied de page des forums