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