“données supplémentaires après la dernière attendus de la colonne” tout en essayant d'importer un fichier csv dans postgresql
J'ai essayer de copier le contenu d'un fichier CSV dans mon postgresql db et je reçois ce message d'erreur "données supplémentaires après la dernière attendus de la colonne".
Le contenu de mon CSV est
agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone
100,RATP (100),http://www.ratp.fr/,CET,,
et mon postgresql commande est
COPY agency (agency_name, agency_url, agency_timezone) FROM 'myFile.txt' CSV HEADER DELIMITER ',';
Voici ma table
CREATE TABLE agency (
agency_id character varying,
agency_name character varying NOT NULL,
agency_url character varying NOT NULL,
agency_timezone character varying NOT NULL,
agency_lang character varying,
agency_phone character varying,
agency_fare_url character varying
);
Column | Type | Modifiers
-----------------+-------------------+-----------
agency_id | character varying |
agency_name | character varying | not null
agency_url | character varying | not null
agency_timezone | character varying | not null
agency_lang | character varying |
agency_phone | character varying |
agency_fare_url | character varying |
- Cela signifie que l'utilisation de la
,
séparateur, lecopy
commande analysé plus de champs que la table de destination! Pouvez vous s'il vous plaît apporter votre table de destination de structure de données et des échantillons de votre CSV contenu ? - J'ai essayé de spécifier les colonnes, mais c'est toujours le même problème. J'ai édité ma question.
- Votre table contient 3 colonnes, mais votre fichier csv que vous souhaitez importer contient
6
- Oui mais je spécifier les colonnes que je veux importer comme spécifié dans la documentation postgresql.org/docs/9.2/static/sql-copy.html "Si une liste de colonnes est spécifié, la COPIE ne copie les données dans les colonnes spécifiées ou à partir du fichier. S'il y a des colonnes de la table qui ne sont pas dans la liste des colonnes, COPIE DE la volonté d'insérer les valeurs par défaut pour les colonnes."
- Oui, mais sadely, postgreSQL
copy
commande ne peut pas gérer de sélection de colonne de votre fichier. En d'autres termes, vous ne pouvez copier tout le fichier à la fois! - Ce que cette colonne déclaration signifie alors?
- Vous pourriez avoir une table avec 6 colonnes et d'un fichier ne contenant que 3 champs par exemple, et vous pouvez importer vos 3 champs à un spécific colonnes de votre table...
- J'ai créé un tableau avec tous les gtfs champs et je précise mes colonnes, mais j'ai toujours le même message d'erreur.
- Je pense que maintenant vous pouvez faire quelque chose comme:
COPY agency (agency_id, agency_name, agency_url, agency_timezone,agency_lang,agency_phone) FROM 'myFile.txt' CSV HEADER DELIMITER ',';
Vous devez vous connecter pour publier un commentaire.
Maintenant, vous disposez de 7 champs.
Vous devez mapper ces 6 champs de la CSV en 6 champs dans la table.
Vous ne pouvez pas mapper seulement 3 champs à partir de csv lorsque vous l'avez 6 comme vous le faites dans:
Tous les champs du fichier csv doivent être mappées dans la copie de la commande.
Et puisque vous avez défini csv
,
délimiteur par défaut, vous n'avez pas besoin de le mettre.J'ai essayé votre exemple, et il fonctionne très bien mais ....
votre commande à partir de la ligne de commande psql est manquant
\
Et la prochaine fois, veuillez inclure
DDL
J'ai créé
DDL
du csv en-têtes\d
comme :\d my_table;
\copy
etCOPY
sont les différentes commandes.COPY
est un PostgreSQL instruction qui est exécutée côté serveur et peut être appelé à partir d'autres outils, comme par exemple pgAdmin.\copy
est la syntaxe spécifique à psql outil de ligne de commande et il lit des fichiers à partir de la client. Les deux sont corrects dans leur propre chemin, donc merci de ne pas assumer d'être une erreur de syntaxe et de ne pas les mélanger.