2015-11-10 41 views
4

我想將完整的數據框導出到已經在數據庫(postgresql)中創建的表中幷包含相似的數據。RPostgreSQL - 將數據框導入表

我發現了一些關於dbwrite表(... overwrite = TRUE)的問題,我不想覆蓋已經存在於我的表中的數據。我只想用r console的數據框更新我的表格。

有人可以讓我知道我能做到這一點..

像這樣

dbInsertTable(con, df, tablename = "MyTable") 

回答

5

你需要dbWriteTable

假設你沒有在你的數據使用行名框架你會做

dbWriteTable(con, "MyTable", df, row.names=FALSE, append=TRUE) 

如果你想要你的行名fr om df是數據庫表中的一列,那麼您將該選項設置爲TRUE。如果你的表格在公共模式以外的模式,那麼你會做c('myschema', 'MyTable')而不是直觀的'myschema.MyTable'。此外,數據框的列需要與數據庫表中列的順序相同。它根據訂單而不是名稱進行匹配。

另外,你可能不應該在你的postgres表或列名中使用大寫字母,因爲那麼你需要引用它們。如果你真的使用大寫字母,那麼你需要類似dbWriteTable(con, '"MyTable"', df, row.names=FALSE, append=TRUE)

+0

@ Dean Mac Gregor:非常感謝。它工作得很好。您的一線解決方案節省了我的時間和精力。謝謝 – Chanti

+0

Mac Gregor:非常感謝您再次提供上述解決方案。我有一個小問題。在**「mytable」**我有4列和一列我正在使用唯一的關鍵約束。同時使用上述解決方案從r控制檯更新表,您提示我面臨一個小錯誤,我知道原因(唯一鍵約束)。 – Chanti

+0

例如我在我的數據框中的列** un_number **中有一個unitnumber 12345。 ** mytable **中的同一列** un_number **已經包含unitnumber 12345.所以我的問題是,如果我有一個重複的單位數在數據框連同其他原始數字 - 是否可以停止只有該數字,而不是停止由於唯一的constarint而更新完整的數據幀。 – Chanti