PostgreSQL的。导入数据跳过n行

时间:2014-04-29 08:41:11

标签: postgresql import insert copy

我想知道如何将数据导入表格。我知道COPY命令和选项HEADER。但我要导入的文件格式如下:

Line 1: header1, header2, header3,... 
Line 2: vartype, vartype, vartype,... 
Line 3: data1, data2,...

你可以看到,我也需要跳过第二行。例如:

"phonenumber","countrycode","firstname","lastname"
INTEGER,INTEGER,VARCHAR(50),VARCHAR(50)
123456789,44,"James","Bond"
5551234567,1,"Angelina","Jolie"
912345678,34,"Antonio","Banderas"

第一行是表格列的确切名称。我曾尝试使用INSERT INTO命令,但结果并不好。

3 个答案:

答案 0 :(得分:1)

我对这类问题使用这两种策略:

1)全部导入

  • 将所有行导入临时表,其中列具有varchar类型
  • 删除您不想要的行
  • 将数据插入最终表格,将varchar投射到所需类型

2)预处理

  • 从导入的文件中删除行
  • 进口

对于您的情况,您可以使用sed删除第二行,例如:

sed -i '2d' importfile.txt

这将从名为importfile.txt的文件中删除第二行。请注意,标记-i将立即覆盖该文件,因此请谨慎使用。

您可以使用它来删除行范围:

sed -i '2,4d' importfile.txt

这将从文件中删除第2,3,4行。

答案 1 :(得分:1)

如果您在Linux shell中工作,则始终可以流式传输所需的记录,例如

tail -[number of lines minus header] <file> | psql <db> -c "COPY <table> FROM STDIN CSV;"

或者如果您的标题标有“#”

grep -v "^#" <file> | psql <db> -c "COPY <table> FROM STDIN CSV;"

答案 2 :(得分:0)

您必须预先处理我害怕的文件。 COPY需要了解太多奇怪的格式(比如这个) - 它只专注于处理基础知识。你可以用一个简单的sed或perl来修剪第二行。

perl -ne 'print unless ($.==2)' source_file.txt