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”不存在
错误:E/RecyclerView:未连接适配器;跳过片段上的布局