问题
我正试图将R数据帧df的内容复制到位于schematable_name中的PostgreSQL表schema_name。默认情况下,PostgreSQL会将表写入public架构,我不想更改此设置。这种转移的两个独特方面是:
在非默认模式下写入表;以及
dataframedf包含的字段数少于table_name。然而,df中所包含的所有字段都存在于table_name中。
我试过的
我第一次尝试使用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,但上面使用的非默认模式黑客似乎不起作用:
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

最佳答案

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

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

然后运行原始的dbWriteTable()。。。

关于r - R-RPostgreSQL软件包-dbWriteTable到非默认架构,其中目标表包含的字段多于数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40477710/

10-12 19:59