我试图将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 ',';
这是我的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 |
5条答案
按热度按时间xdyibdwo1#
现在您有7个字段。
您需要将CSV中的这6个字段Map到表中的6个字段。
当您有6个字段时,您不能像在中那样仅从csvMap3个字段:
csv文件中的所有字段都需要在copy from命令中Map。
而且由于你定义的csv
,
分隔符是default,你不需要把它。scyqe7ek2#
不确定这算不算是答案,但我刚刚用一堆CSV文件找到了这个问题,发现只要在Excel中打开它们,然后重新保存,不做任何更改,错误就消失了。IOTW可能在源文件中有一些不正确的格式,Excel能够自动清理。
5q4ezhmt3#
如果postgres表和csv文件中的列数相同,即使在
\copy
命令中指定了delimiter ','
,也会发生此错误。您还需要指定CSV
。在我的例子中,我的一个列包含逗号分隔的数据,我执行:
添加
CSV
后工作正常:wgxvkvu94#
对于未来的访问者,当我遇到这个问题时,这是因为我使用了一个循环,该循环在将查询提交到数据库(context)之前写入了同一个
io.StringsIO()
变量。如果遇到此问题,请确保代码如下所示:
而不是这样:
hujrc8aj5#
我试过你的例子,效果很好,但是......
psql命令行中的命令缺少
\
下次请包括
DDL
我从csv标题创建了
DDL