【问题标题】:RPostgreSQL - import dataframe into a tableRPostgreSQL - 将数据框导入表中
【发布时间】:2015-11-10 16:23:07
【问题描述】:

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

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

谁能告诉我我该怎么做..

类似的东西

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

【问题讨论】:

    标签: r rpostgresql


    【解决方案1】:

    你需要dbWriteTable

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

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

    如果您希望 df 中的行名成为数据库表中的一列,那么您可以将该选项设置为 TRUE。如果您的表位于公共架构以外的架构中,那么您将使用c('myschema', 'MyTable') 而不是直观的“myschema.MyTable”。此外,数据框的列需要与数据库表中的列的顺序相同。它基于订单而不是名称匹配。

    顺便说一句,您可能不应该在您的 postgres 表或列名中使用大写字母,因为您需要引用它们。如果你真的使用大写字母,那么你需要dbWriteTable(con, '"MyTable"', df, row.names=FALSE, append=TRUE)

    【讨论】:

    • @Dean Mac Gregor:非常感谢。它工作得很好。您的一条线解决方案为我节省了很多时间和精力。谢谢
    • Mac Gregor:再次非常感谢您提供上述解决方案。我有一个小问题。在 "mytable" 我有 4 列,其中一列我使用唯一键约束。在使用您建议的上述解决方案从 r 控制台更新表时,我遇到了一个小错误,我知道原因(唯一键约束)。
    • 例如,我的数据框中的 un_number 列中有一个单元号 12345。 mytable 中的同一列 un_number 已经包含 unitnumber 12345。所以我的问题是,如果我在数据框中有重复的 unitnumber 以及其他原始数字 - 是否可以停止由于唯一的约束,只有那个数字而不是停止更新完整的数据帧。
    • @Chanti 我不知道。您必须过滤 df 或从 mytable 中删除行。您还可以将 dbwritetable 写入临时表,然后从临时表执行 upsert 查询到永久表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多