我有一个 R 脚本,我想从 MySQL 数据库中提取一些数据,然后从 PostgreSQL 数据库中提取。但是,从 RMySQL 加载 MySQL 驱动程序会阻止我从PostgreSQL
.
我可以自己加载 Postgres 驱动程序:
> RPostgreSQL::PostgreSQL()
<PostgreSQLDriver:(58810)>
然后我可以加载 RMySQL 驱动程序:
> RMySQL::MySQL()
<MySQLDriver>
但是,如果我先加载 MySQL 驱动程序,则 PostgreSQL 驱动程序无法加载:
> RMySQL::MySQL()
<MySQLDriver>
> RPostgreSQL::PostgreSQL()
Error in as.integer(from) :
cannot coerce type 'S4' to vector of type 'integer'
这对我来说似乎有点神奇:RMySQL 不应该改变 RPostgreSQL 命名空间中的函数。
有谁知道可能导致此问题的原因以及如何解决?我已经在两台不同的机器上复制了这个问题,结果完全相同。
机器 1:Mac OS 10.9.5:
Machine R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] DBI_0.3.1 RMySQL_0.10 RPostgreSQL_0.41
机器 2:Fedora 发行版 20(Heisenbug):
R version 3.1.1 (2014-07-10)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] DBI_0.3.1 RMySQL_0.10 RPostgreSQL_0.4
/edit:此外,即使我先加载 Postgres 驱动程序,仅加载 MySQL 驱动程序也会完全破坏 Postgres 驱动程序:
library(DBI)
dr1 <- RPostgreSQL::PostgreSQL()
dr2 <- RMySQL::MySQL()
> dbConnect(dr1, host = "me", port = "1234", dbname = "me", user="me", password="me")
Error in as.integer(from) :
cannot coerce type 'S4' to vector of type 'integer'
/edit 2:这是一个错误RMySQL 0.10
;上面的代码在RMySQL 0.9.3
. 从这个 20 个月的问题来看,RMySQL 中不时出现类似的错误。