我有一个关于 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/

10-11 22:35
查看更多