“试图将csv文件导入postgresql时出现”最后一个预期的列之后的额外数据“

问题描述:

我尝试将CS​​V文件的内容复制到我的postgresql数据库中,并且出现”最后一次预期列之后的额外数据“错误。“试图将csv文件导入postgresql时出现”最后一个预期的列之后的额外数据“

我的CSV的内容是

agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone 
100,RATP (100),http://www.ratp.fr/,CET,, 

和我的PostgreSQL的命令是

COPY agency (agency_name, agency_url, agency_timezone) FROM 'myFile.txt' CSV HEADER DELIMITER ','; 

这里是我的表

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 | 
+0

这意味着使用'''分隔符,'copy'命令解析了比目标表更多的字段!你能否带上你的目的地表格数据结构和CSV内容的样本? – Houari 2014-11-02 17:55:09

+0

我试图指定列,但它仍然是同样的问题。 我编辑了我的问题。 – 2014-11-02 19:22:11

+0

您的表格包含3列,但您要导入的csv文件包含'6' – Houari 2014-11-02 19:26:12

现在你有7个领域。

您需要将这6个字段从CSV映射到6个字段中。

\COPY agency (agency_name, agency_url, agency_timezone) FROM 'myFile.txt' CSV HEADER DELIMITER ','; 

所有的csv文件字段需要在从命令副本映射:

,当你拥有了它6像你一样在你不能映射从CSV只有3场。

而且由于您定义了csv ,分隔符是默认的,所以您无需放置它。

+0

谢谢,这个命令工作COPY机构(agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone)从'myFile.txt'CSV HEADER DELIMITER','; – 2014-11-02 20:13:36

+0

嗨弗雷德,你做了哪些改变? – user2867432 2016-11-11 22:50:48

我想你的榜样,它工作正常,但。 ...

从PSQL命令行你的命令缺少\

database=# \COPY agency FROM 'myFile.txt' CSV HEADER DELIMITER ','; 

而且下一次请包括DDL

我创建从CSV头DDL

+0

这些DDL是什么,我如何包括它? 我尝试了'\ COPY',但它没有改变任何东西。 – 2014-11-02 19:19:16

+0

@yowza你可以使用'\ d'来获得DDL,例如:'\ d my_table;' – Houari 2014-11-02 19:31:46

+0

DDL是数据定义语言,即在这种情况下创建表的语句。 您正试图在csv文件中映射6列中的3列。 在psql中使用这个命令,用postgres用户自定义数据库: drop table if exists agency; create table agency(agency_id int,agency_name text,agency_url text,agency_timezone text,agency_lang text,agency_phone text); \ COPY代理从'myFile.txt'CSV HEADER DELIMITER','; – 2014-11-02 19:31:59