"最后一个预期列后的额外数据"在尝试将csv文件导入postgresql时

时间:2014-11-02 16:41:50

标签: postgresql csv postgresql-9.3

我尝试将CS​​V文件的内容复制到我的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 | 

3 个答案:

答案 0 :(得分:31)

现在你有7个字段。

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

当你拥有它时,你不能只从csv中映射3个字段,如下所示:

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

csv文件中的所有字段都需要在命令副本中映射。

由于你定义了csv ,分隔符是默认的,你不需要把它。

答案 1 :(得分:0)

不确定这是否可以作为答案,但是我只是用一堆CSV文件将其击中,发现只需在Excel中打开它们并重新保存它们而没有任何更改,该错误就会消失。 IOTW可能会导致Excel能够自动清除源文件中的某些格式错误。

答案 2 :(得分:-1)

我尝试了你的例子,它工作正常,但....

psql命令行中的命令缺少\

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

下次请加入DDL

我从csv标头

创建了DDL