如何导入缺少值的表?

时间:2014-08-31 15:17:03

标签: postgresql bulk-load

我使用篮球数据表来了解Postgres 9.2& phpPgAdmin的。因此,我想将csv表导入该数据库。但是,我得到了:

ERROR:  missing data for column "year"
CONTEXT:  COPY coaches, line 1: ""coachid";"year";"yr_order";"firstname";"lastname";"season_win";"season_loss";"playoff_win";"playoff..."

使用命令:

\copy coaches FROM '/Users/Desktop/Database/NBAPostGres/DataOriginal/coaches_data.csv' DELIMITER ',' CSV;

当前表没有错过。所以我的问题是:

  1. 我错了什么,如果使用缺少值的表格?

  2. 如何导入此类表格或处理此类结构(也就缺失值而言)?

  3. 数据结构:

     coachid    year    yr_order    firstname   lastname    season_win
     HAMBLFR01  204        2          Frank     Hamblen         10
     RUSSEJO01  1946       1          John      Russell         22
    

    我用过:

     varchar     integer   integer  character    character     integer
    

2 个答案:

答案 0 :(得分:20)

整个表可能缺少列。告诉COPY(或psql包装器\copy)仅填充将列列表附加到表中的那些列,例如:

\copy coaches (coachid, yr_order, firstname)
FROM '/Users/.../coaches_data.csv' (FORMAT csv, HEADER, DELIMITER ',');

缺少列使用列默认值填充。 Per documentation

  

如果表中有任何列不在列列表中,   COPY FROM将插入这些列的默认值。

但是不能 只有一些行缺少值。那是不可能的。可以使用NULL的文本表示(覆盖相应的列默认值)。

这一切都在手册中,真的:

答案 1 :(得分:1)

  

错误:列“年”缺少数据背景:COPY教练,第1行:   “” coachid “;” 年 “” yr_order “;” 姓名 “;” 姓 “” season_win “;” season_loss “;” playoff_win “;” 淘汰赛...“

此类错误也是表格不匹配的结果。将文本文件导入的表具有比文本文件更多的列或更少的列。