PostgreSQL的。导入数据跳过n行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL的。导入数据跳过n行相关的知识,希望对你有一定的参考价值。

我想知道如何将数据导入表。我知道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命令,但我没有得到好结果。

答案

我正在使用这两种策略来解决这类问题:

1)全部导入

  • 将所有行导入临时表,其中列具有varchar类型
  • 删除你不想要的行
  • 将数据插入到最终表中,将varchar转换为所需类型

2)预处理

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

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

sed -i '2d' importfile.txt

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

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

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

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

另一答案

如果你在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;"
另一答案

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

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

以上是关于PostgreSQL的。导入数据跳过n行的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误:跳过导入行,所需类别“Nintendo DS / DS Lite / DSi”不存在

Node.js JavaScript 片段中的跳过代码

错误:E/RecyclerView:未连接适配器;跳过片段上的布局

postgresql怎么导入数据库

在过去 24 小时内从 MySQL 中选择行并根据间隔 X 跳过行?

linux debian 9 配置postgresSQL数据库