COPY命令:仅复制csv中的特定列

时间:2013-03-29 16:41:35

标签: postgresql header postgresql-copy

我对PostgreSQL中的COPY命令有疑问。我有一个CSV文件,我只想将一些列值复制到我的PostgreSQL表中。

有可能这样做吗?我熟悉使用COPY命令将CSV中的所有数据复制到表中,使用标题映射到列名称但是当我只想要一些列时,这怎么可能?

2 个答案:

答案 0 :(得分:9)

预处理CSV文件,或者(我可能会做的)导入到目标表的临时副本中,INSERT仅在第二步中导入:

CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0;
ALTER TABLE tmp ADD COLUMN etra_column1 text
             ,  ADD COLUMN etra_column2 text;  -- add excess columns
COPY tmp FROM '/path/tp/file.csv';

INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM tmp  -- only reelvant columns
WHERE  ...  -- optional, to also filter rows

会话结束时会自动删除临时表。如果处理时间较长,请使用常规表。

答案 1 :(得分:-1)

从程序'cut -f1,2,3 -d,/path/tp/file.csv'复制目标表;