Postgresql 复制命令:仅从csv复制特定列

Postgresql 复制命令:仅从csv复制特定列,postgresql,header,postgresql-copy,Postgresql,Header,Postgresql Copy,我对PostgreSQL中的COPY命令有一个疑问。我有一个CSV文件,我只想将一些列值复制到我的PostgreSQL表中 有可能这样做吗?我熟悉使用COPY命令将CSV中的所有数据复制到一个表中,使用标题映射到列名,但是当我只需要一些列时,这怎么可能呢?可以预处理CSV文件,或者(我可能会这样做)导入到目标表的临时副本中,并在第二步中仅插入选定列: CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0; ALTER TABLE

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


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

可以预处理CSV文件,或者(我可能会这样做)导入到目标表的临时副本中,并在第二步中仅插入选定列:

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

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

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

好的,太棒了,这是个好消息。我想预处理CSV文件,但临时表似乎会更容易。非常感谢。如果桌子是巨大的-千兆字节大小,有什么建议吗?@Chloe:这在很大程度上取决于细节和你的要求。您的Postgres版本、表和CSV文件的大小、行的宽度、多余的列数、可用资源、超级用户权限、并发访问、CSV格式的数据是否一致?等等,我建议你开始一个新的问题。谢谢您的编辑,顺便说一句,我确实专注于选择行而不是列。^上面的cut命令可以帮助您预处理数据,如上所述。不过我不会在CSV中进行内联操作。。。