我有一个关于 PostgreSQL 中 COPY
命令的问题。我有一个 CSV 文件,我只想将一些列值复制到我的 PostgreSQL 表中。
是否有可能做到这一点?我熟悉使用 COPY
命令将所有数据从 CSV 复制到使用标题映射到列名的表中,但是当我只需要某些列时,这怎么可能?
最佳答案
预处理 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
在 session 结束时自动删除临时表。如果处理时间较长,请使用常规表。
关于postgresql - 复制命令 : copy only specific columns from csv,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15707519/