将tsv文件中的无标题列复制到postgresql?

时间:2016-07-08 21:12:36

标签: postgresql csv

tsv是指由制表符分隔的文件。我有一个非常大的(6GB)数据文件,我必须导入到PostgreSQL数据库中,在56列中,前8个是有意义的,然后在其他48个中有几个列(如7个左右)和1& #39; s稀疏地分布,其余为0&s。有没有办法指定要复制到表中的文件中的哪些列?如果没有,那么我可以导入整个文件并只提取所需的列作为我的项目的数据,但我担心将过大的内存分配给一个表,其中少于1/4的数据是有意义的。这会引起一个问题,还是我可以将有意义的列放到我的表中?我已经考虑将该表用作临时表,然后将有意义的列导入到另一个表中,但我已经被指示试图避免进行中间清理步骤,所以如果它赢了&#39,我应该可以直接使用大表。 ; t导致PostgreSQL中的任何问题。

1 个答案:

答案 0 :(得分:2)

使用PostgreSQL 9.3或更高版本,COPY接受程序作为输入。此选项正好适用于此类预处理。例如,要仅保留TSV文件中以制表符分隔的字段1到4和7,您可以运行:

COPY destination_table FROM PROGRAM 'cut -f1-4,7 /path/to/file' (format csv, delimiter '\t');

这也适用于psql中的\copy,在这种情况下,程序在客户端执行。