【问题标题】:dbplyr in_schema() function behaving strangelydbplyr in_schema() 函数行为异常
【发布时间】:2018-04-22 20:11:59
【问题描述】:

我正在使用 dbplyr 包中的 in_schema() 函数在来自 R 的 postgresql 数据库的命名模式中创建表。

这不是一段新代码,它曾经按预期工作 = 在模式“my_schema”中创建一个名为“my_table”的表。

con <- dbConnect(odbc::odbc(), 
                 driver = "PostgreSQL Unicode", 
                 server = "server", 
                 port = 5432, 
                 uid = "user name", 
                 password = "password", 
                 database = "dbase")

dbWriteTable(con,
             in_schema('my_schema', 'my_table'),
             value = whatever) # assume that 'whatever' is a data frame...

这段代码现在出现了问题,意外开始在我的数据库的默认公共方案中创建一个名为“my_scheme.my_table”的表,而不是预期的 my_schema.my_table。

有没有其他人注意到这种行为,是否有解决方案(除了使用默认的 postgresql 方案,这在我的情况下不实用)?

【问题讨论】:

  • 您可以尝试专门针对 RPostgresql 的向量语法:stackoverflow.com/a/12001451 或者您可以尝试 DBI::Id(schema="my_schema", name="my_table")。

标签: r postgresql dbplyr


【解决方案1】:

为此,我建议使用copy_to() 而不是dbWriteTable()copy_to(con, iris, in_schema("production", "iris"))

【讨论】:

  • 谢谢,但这不起作用:copy_to() 创建一个 temporary 表 - Postgres 中的临时表不能在标准模式中使用(它们有自己的,特殊方案)。您的代码将转换为 create temporary table production.iris (...),这不是合法的 Postgres 代码。
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 2011-10-18
  • 2022-12-04
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多