2016-07-27 43 views
0

我有一個PostgreSQL數據庫。我不得不擴展現有的大表格,並增加幾列。PostgreSQL:將列導入到表中,匹配鍵/ ID

現在我需要填寫這些列。我想我可以創建一個包含現有行ID /主鍵的.csv文件(超出Excel/Calc) - 以及新的空字段的數據。是否有可能這樣做?如果是,如何?

我記得使用Microsoft SQL Management Server來完成這項工作非常容易,但是對於PostgreSQL,我使用的是PG Admin(但如果它有幫助,我願意切換該工具)。我嘗試使用PG Admin的導入功能,它使用PostgreSQL的COPY功能,但它看起來像COPY不適合,因爲它只能創建全新的行。

編輯:我想我可以編寫一個腳本加載csv並遍歷行,使用UPDATE。但我不想重新發明輪子。

編輯2:我發現this question here on SO它提供了一個使用臨時表的答案。我想我會使用它 - 儘管它比解決方案更像是一種解決方法。

+0

是的,有可能這樣做 – e4c5

+0

嘿,謝謝。也許你甚至可以告訴我如何? –

+0

你沒問過。你可以通過巧妙的使用COPY – e4c5

回答

1

PostgreSQL可以通過COPY語句直接從CSV文件中導入數據,但是這隻會對新行有效,正如您所說的那樣。

而不是創建一個CSV文件,您可以生成必要的SQL UPDATE語句。

想這將是CSV文件

PK;ExtraCol1;ExtraCol2 
1;"foo",42 
4;"bar",21 

然後,只需出示下列

UPDATE my_table SET ExtraCol1 = 'foo', ExtraCol2 = 42 WHERE PK = 1; 
UPDATE my_table SET ExtraCol1 = 'bar', ExtraCol2 = 21 WHERE PK = 4; 

你似乎在Windows下工作,所以我真的不知道怎麼有做到這一點(可能使用PowerShell),但是在Unix下,您可以使用如awksed這樣的工具輕鬆地從CSV生成SQL。有正則表達式支持的編輯可能也足夠了。