我想知道如何将数据导入表格。我知道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
命令,但结果并不好。
答案 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