postgresql将几个csv列复制到我表上的特定列

时间:2017-03-22 01:52:49

标签: postgresql csv

我使用postgresql拷贝将我的csv文件存储到我的表中。但事情是在我的csv表上我有4field

f2 f5 f6 f13

并在我的postgresql表上有8个表

f1 f2 f3 f4 f5 f6 f7 f8

我想让f1成为我做的序列,f3是current_date而另一个是null

这与my question类似,但这个问题是在2013年提出的(也许现在还有其他解决方案?)

关键是我要从csv的特定列插入到特定列postgresql,如果可能的话我不想制作临时表

1 个答案:

答案 0 :(得分:0)

您可以使用COPY选择性地声明目标列:

COPY tbl(f2, f5, f6, f7) FROM '/path/to/file.csv'

不确定您想要使用f13暗示什么...如果来源有列想要插入表中,那么需要另一个(临时)表作为垫脚石。或者您必须先编辑文件。

第三种选择是临时向目标表添加列。添加NULL列很便宜,不会触发表重写。您可以COPY到表格,然后再次删除该列。这也不会触发表重写并且也非常便宜:已删除的列仍然在物理上,但在pg_attribute中标记为死。表上的行或UPDATE上的任何VACUUM FULL或备份/恢复周期都会在物理上删除死列。

ALTER TABLE tbl ADD COLUMN f13 text;
COPY tbl(f2, f5, f6, f13) FROM '/path/to/file.csv'
ALTER TABLE tbl DROP COLUMN f13;

如果您在一次交易中完成所有操作,则该列保持对世界其他地方不可见 ,只有表(和超级用户)的所有者可以使用ALTER TABLE

相关: