RPostgreSQL-将数据帧导入到表中

RPostgreSQL-将数据帧导入到表中,r,rpostgresql,R,Rpostgresql,我想将一个完整的dataframe导出到一个表中,该表已经在数据库(postgresql)中创建,并且包含类似的数据 我发现了一些关于dbwrite表的问题(..overwrite=TRUE),我不想覆盖表中已经存在的数据。我只想用r控制台中的数据帧更新我的表 有人能告诉我怎么做吗 像这样的 dbInsertTable(con, df, tablename = "MyTable") 您需要dbWriteTable 假设您在数据框中不使用行名称,您会这样做 dbWriteTable(con, "

我想将一个完整的dataframe导出到一个表中,该表已经在数据库(postgresql)中创建,并且包含类似的数据

我发现了一些关于dbwrite表的问题(..overwrite=TRUE),我不想覆盖表中已经存在的数据。我只想用r控制台中的数据帧更新我的表

有人能告诉我怎么做吗

像这样的

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

您需要
dbWriteTable

假设您在数据框中不使用行名称,您会这样做

dbWriteTable(con, "MyTable", df, row.names=FALSE, append=TRUE)
如果希望df中的行名成为数据库表中的一列,则应将该选项设置为
TRUE
。如果您的表位于公共模式以外的模式中,那么您应该使用
c('myschema','MyTable')
而不是直观的'myschema.MyTable'。此外,dataframe的列的顺序必须与数据库表中的列的顺序相同。它根据顺序而不是名称匹配


另外,您可能不应该在postgres表或列名中使用大写字母,因为这样您就需要引用它们。如果你真的使用大写字母,那么你需要像dbWriteTable这样的东西(con,““MyTable”,df,row.names=FALSE,append=TRUE)

@Dean Mac Gregor:非常感谢。它工作得很好。您的单线解决方案节省了我很多时间和精力。谢谢Mac Gregor:再次非常感谢您提供上述解决方案。我有一个小问题。在“mytable”中,我有4列,其中一列使用唯一键约束。使用上述解决方案从r控制台更新表时,您建议我遇到一个小错误,我知道原因(唯一键约束)。例如,我在数据框的UNU number列中有一个unitnumber 12345。mytable中的同一列un_编号已包含单元号12345。所以我的问题是,如果我在数据帧中有一个重复的单位号以及其他原始数字,是否可以只停止该数字,而不是因为唯一常量而停止整个数据帧的更新。@Chanti,我不知道。您必须筛选df或从mytable中删除行。您还可以将dbwritetable写入临时表,然后执行从临时表到永久表的upsert查询。