我对PostgreSQL中的COPY
命令有疑问。我有一个CSV文件,我只想将一些列值复制到我的PostgreSQL表中。
有可能这样做吗?我熟悉使用COPY
命令将CSV中的所有数据复制到表中,使用标题映射到列名称但是当我只想要一些列时,这怎么可能?
答案 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'复制目标表;