Vous n'êtes pas identifié(e).
Pages : 1
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
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
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
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
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
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
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
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
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
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
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
Pages : 1