2017-03-22 14 views
0

我使用postgresql副本將我的csv文件存儲到我的表中。但事情是在我的CSV表我已經4fieldpostgresql將幾個csv列複製到我的表上的特定列

f2 f5 f6 f13 

,並在我的PostgreSQL表有8臺

f1 f2 f3 f4 f5 f6 f7 f8 

,我想使F1序列我做,和F3是CURRENT_DATE和另一種是空

這是類同my question,但問題是問2013年(也許現在還有其他的解決辦法?)

關鍵是我想櫻雪RT從特定列從CSV到特定的列的PostgreSQL,如果可能的話我不想使臨時表

回答

0

您可以選擇性地與COPY聲明目標列:

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

不知道你想和f13暗示什麼。 ..如果源有你的列不是想要插入表中,你需要需要另一個(臨時)表作爲墊腳石。或者你必須先編輯你的文件。

第三個選項是臨時向目標表添加一列。添加一個NULL列很便宜,不會觸發表重寫。您可以將COPY添加到表格中,然後再次刪除該列。這也不會觸發表重寫,也很便宜:丟棄的列仍然在物理上,但在pg_attribute中被標記爲死亡。表上的任何UPDATEVACUUM 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

相關:

+0

F13是,我不需要投入數據庫 –

+0

@AlexanderChandra數據:我增加了一個主意。 –

相關問題