将csv文件的一些列复制到表错误中

时间:2017-02-11 11:34:28

标签: excel postgresql csv copy etl

Excel sheet data to import into postgres table with only few columns

我在带有zone.csv命名的Excel工作表中的数据只需要从excel导入几个列到以hc_court_master命名的postgres表

ERROR: extra data after last expected column
SQL state: 22P04
Context: COPY hc_court_master, line 1: "court_code,court_name,short_c_name,category,dist_no,dist_name,category1"

我收到了错误

<tbody id="items-${job.id}" v-for="item in items">
        <tr>Item id = {{item.id}}</tr>
....

3 个答案:

答案 0 :(得分:2)

有两个问题:

  1. 您无法从csv复制少量列。你不能改变他们的秩序。

  2. 只需在with子句中使用HEADER关键字来忽略csv文件中的标头。

  3.  copy hc_court_master (court_code, court_name, short_c_name,
           category, dist_no, dist_name, category1)
     from 'D:\district.csv'
     with (format csv, HEADER)
    

    如果您不想要表格中的所有字段,您可以:

    1. 导入后的ALTER TABLE DROP COLUMN

    2. 导入临时表,然后运行INSERT INTO ... SELECT ...

答案 1 :(得分:0)

如上所述,您无法从CSV加载选定的字段,只能加载整个数据。所以

begin; -- Start transaction

do $$
begin
  create temp table t( -- Create table to load data from CSV
    court_code text, -- There are whole list of columns ...
    court_name text,
    short_c_name text,
    category text,
    dist_no text,
    dist_name text,
    category1 text)  on commit drop;
  copy t from '/home/temp/a.csv' with (
    format CSV,
    header -- To ignore first line
    );
end $$;

insert into hc_court_master (district_cd, category,category1,shrt_nm,court_name)
select <appropriate columns> from t;
commit;

答案 2 :(得分:-1)

copy hc_court_master (district_cd, category,category1,shrt_nm,court_name)
from 'D:\district.csv'
with (format csv)

我认为上面的sql只有在你的csv只包含必需的列(zone_cd,category,category1,shrt_nm,court_name)时才有效。

您可以删除额外的列,然后尝试上传。

请参阅以下链接

Copy a few of the columns of a csv file into a table