Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL。导入数据跳过n行_Postgresql_Import_Insert_Copy - Fatal编程技术网

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计算机等效的解决方案?我想有人需要为此提出一个问题。