【问题标题】:ERROR: extra data after last expected column in postgres table错误:postgres 表中最后一个预期列之后的额外数据
【发布时间】:2017-08-15 13:43:30
【问题描述】:

我正在做一个项目,我需要创建一个新表,然后从 CSV 导入数据。我在 StackOverflow 上阅读了许多类似的问题(“最后一个预期列之后的额外数据”)和答案,但我仍然没有找到罪魁祸首。

CREATE TABLE colleges2014_15 (
unitid integer, 
intsnm text, 
city text, 
stabbr text, 
zip_clean char, 
control integer, 
latitude float, 
longitude float, 
tutionfee_in float, 
tuitionfee_out float, 
pctpell float,
inc_pct_lo float, 
dep_stat_pct_ind float, 
dep_debt_mdn float, 
ind_debt_mdn float, 
pell_debt_mdn float,
ugds_men float, 
ubds_women float, 
locale integer, 
PRIMARY KEY(unitid)
);

成功创建了包含 19 个不同列的表。然后我去尝试将数据导入到新表中。

COPY colleges2014_15(
unitid, 
intsnm, 
city, 
stabbr, 
zip_clean, 
control, 
latitude, 
longitude, 
tutionfee_in, 
tuitionfee_out, 
pctpell,
inc_pct_lo, 
dep_stat_pct_ind, 
dep_debt_mdn, 
ind_debt_mdn, 
pell_debt_mdn, 
ugds_men, 
ubds_women, 
locale
)
FROM '/Users/compose/Downloads/CollegeScorecard_Raw_Data x/MERGED2014_15_cleaned.csv' CSV HEADER
;

我收到错误消息。我在 CSV 中完成了以下操作:

  • 确保将其保存为 UTF-8 CSV(在 Mac 上工作)
  • 已清除每行中的所有逗号
  • 清除所有 NULL 值
  • 确认所有数据类型(整数、浮点数、文本等)均正确
  • 我尝试只复制第一列unitid;它失败了。我尝试只导入第二列 (intsnm),但失败并出现同样的错误。

尝试复制所有 19 列时的完整错误消息如下:

执行 SQL 命令时出错:COPY 大学 2014_15(unitid,intsnm,城市,stabbr,zip_clean, 控制,纬度,经度,tutionfee_in,tutionfee_out, pctpell,inc_pct_...

错误:最后一个预期列之后的额外数据位置:复制 学院 2014_15,第 2 行:“100654,Alabama A & M 大学,正常,AL,35762,35762,1,34.783368,-86.568502,9096,16596,0.7356,0.651..." 1 条语句失败。

执行时间:0.03s

尝试仅复制第一列时的完整错误消息是:

执行 SQL 命令时出错:COPY 大学 2014_15(unitid) 来自 '/用户/撰写/下载/CollegeScorecard_Raw_Data x/MERGED2014_15_cleaned.csv' CSV 标题

错误:最后一个预期列之后的额外数据位置:复制 学院 2014_15,第 2 行:“100654,Alabama A & M 大学,正常,AL,35762,35762,1,34.783368,-86.568502,9096,16596,0.7356,0.651..." 1 条语句失败。

执行时间:0.01s

非常感谢任何帮助。

【问题讨论】:

  • 你能告诉我们源 CSV 文件的前 2-3 行吗?
  • UNITID,INSTNM,CITY,STABBR,ZIP,ZIP_CLEAN,CONTROL,LATITUDE,LONGITUDE,TUITIONFEE_IN,TUITIONFEE_OUT,PCTPELL,INC_PCT_LO,DEP_STAT_PCT_IND,DEP_DEBT_MDN,IND_DEBT_MDN,PELL_DEBT_MDN,UGDS_MEN,UGDS_WOMEN,LO农工大学,Normal,AL,35762,35762,1,34.783368,-86.568502,9096,16596,0.7356,0.651521138,0.129593046,15000,18951,17000,0.4831,0.5169,12

标签: postgresql csv


【解决方案1】:

我花了一段时间才弄清楚在错误上搜索出了什么问题,所以我发布了我的问题以帮助其他人。我的问题是 pgAdmin 缺乏经验 pgAdmin 要求在导入数据之前创建带有列的表。我曾期望从 .csv 文件中使用标头,而我使用的大多数其他包都是这样工作的。

如果您正在使用 PostGIS 使用 GIS 系统,那么有一个简单的解决方案。我使用的是 QGIS 3.4,安装了 Postgres 和 PostGIS。

在 QGIS
选择数据库菜单选项
选择 DBManager
在左侧 - 选择桌子的位置 选择导入图层/文件 在下一个窗口中选择以下
输入 - 选择文件
表 - 输入表名
好的

【讨论】:

    【解决方案2】:

    您的 CSV 有一个 ZIP 列,您的表和 COPY 语句省略了该列。

    【讨论】:

    • 谢谢!我认为 SQL 会忽略未指定的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多