dbplyr in_schema() 函数行为异常

Posted

技术标签:

【中文标题】dbplyr in_schema() 函数行为异常【英文标题】:dbplyr in_schema() function behaving strangely 【发布时间】: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 的向量语法:***.com/a/12001451 或者您可以尝试 DBI::Id(schema="my_schema", name="my_table")。 【参考方案1】:

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

【讨论】:

谢谢,但这不起作用:copy_to() 创建一个 temporary 表 - Postgres 中的临时表不能在标准模式中使用(它们有自己的,特殊方案)。您的代码将转换为 create temporary table production.iris (...),这不是合法的 Postgres 代码。

以上是关于dbplyr in_schema() 函数行为异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 dbReadTable in_schema

从 dbplyr 中的给定 SQL 查询开始使用 dbplyr

使用 dbplyr 跨数据库连接

如何在 dbplyr 中“排列”聚合变量?

dbplyr:从数据库中的表中删除行

用 dbplyr 总结的五位数