我使用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,如果可能的话我不想制作临时表
答案 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
。
相关: