R - RPostgreSQL包 - dbWriteTable到非默认模式,其中目标表包含的字段多于数据帧

时间:2016-11-08 01:50:17

标签: r postgresql schema rpostgresql

问题

我正在尝试将R数据帧df的内容复制到位于架构table_name中的PostgreSQL表schema_name。默认情况下,PostgreSQL会将表写入public架构,而想要更改此设置。这种转移的两个独特方面是:

  1. 在非默认架构下写入表格;和
  2. 数据框df包含的字段数少于table_name所有 df中包含的字段确实存在于table_name中。
  3. 我尝试过什么

    我首先尝试使用解决方法从dbWriteTable包中使用RPostgreSQL

    dbWriteTable(con, c("schema_name","table_name"), df, append = T)

    导致以下异常:

    Error in postgresqlgetResult(new.con) : 
      RS-DBI driver: (could not Retrieve the result : ERROR:  missing data for column "extra_col"
    CONTEXT:  COPY df, line 1: " [removed contents] "
    

    然后我尝试从dbWriteTable2包(前面提到的caroline函数的包装器)向我们dbWriteTable,但上面使用的非默认模式hack似乎不起作用:

    dbWriteTable2(con, c("schema_name","table_name"), df, append = T, add.id = FALSE)

    创建以下异常:

    creating NAs/NULLs for for fields of table that are missing in your df 
    Error in postgresqlExecStatement(conn, statement, ...) : 
    RS-DBI driver: (could not Retrieve the result : ERROR:  relation "schema_name" does not exist 
    LINE 1: SELECT * FROM schema_name ORDER BY id DESC LIMIT 1
    

1 个答案:

答案 0 :(得分:1)

在查询之前添加缺少的空字段:

df$extr_col1 <- NA
df$extr_col2 <- NA
...

然后运行您的原始dbWriteTable() ...