PostgreSQL。导入数据跳过n行
我想知道如何将数据导入表。我知道PostgreSQL。导入数据跳过n行,postgresql,import,insert,copy,Postgresql,Import,Insert,Copy,我想知道如何将数据导入表。我知道COPY命令和标题选项。但我必须导入的文件具有以下格式: Line 1: header1, header2, header3,... Line 2: vartype, vartype, vartype,... Line 3: data1, data2,... 正如你所看到的,我也需要跳过第二行。例如: "phonenumber","countrycode","firstname","lastname" INTEGER,INTEGER,VARCHAR(50),
COPY
命令和标题选项。但我必须导入的文件具有以下格式:
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"
sed -i '2d' importfile.txt
第一行是表列的确切名称。我尝试使用插入到命令,但没有得到好的结果。恐怕您必须对文件进行预处理。有太多奇怪的格式(像这样)让复制无法理解——它只专注于处理基本的内容。您可以使用简单的sed或perl来修剪第二行
perl -ne 'print unless ($.==2)' source_file.txt
对于这类问题,我使用以下两种策略:
1) 全部导入
- 将所有行导入临时表,其中列具有
varchar
type
- 删除不需要的行
- 将数据插入最终表,将
varchar
转换为所需类型
2) 预处理
- 从导入的文件中删除行
- 进口
对于您的情况,您可以使用sed
删除第二行,例如:
"phonenumber","countrycode","firstname","lastname"
INTEGER,INTEGER,VARCHAR(50),VARCHAR(50)
123456789,44,"James","Bond"
5551234567,1,"Angelina","Jolie"
912345678,34,"Antonio","Banderas"
sed -i '2d' importfile.txt
这将从名为importfile.txt的文件中删除第2行。请注意,flag-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;"
tail-[行数减去页眉]| psql-c“从STDIN CSV复制
或者如果您的标题用say“#”标记
grep-v“^35;”| psql-c”从stdincsv复制
您好,您有没有想到一个与windows计算机等效的解决方案?我想有人需要为此提出一个问题。