gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:21:46 27 4
gpt4 key购买 nike

问题

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

  1. 在非默认模式下写入表;和
  2. 数据框 df 包含的字段数量少于 table_name。但是,df 中包含的所有 字段确实存在于table_name 中。

我尝试过的

我首先尝试使用 RPostgreSQL 包中的 dbWriteTable,方法是:

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] "

然后我尝试使用 caroline 包(上述 dbWriteTable 函数的包装器)中的 dbWriteTable2,但是非默认模式上面使用的 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

最佳答案

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

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com