MySQL データベースからデータを取得し、次に PostgreSQL データベースからデータを取得する R スクリプトがあります。ただし、RMySQL から MySQL ドライバーをロードすると、PostgreSQL ドライバーを からロードできなくなります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 の名前空間の関数を変更すべきではありません。
この問題の原因と解決方法を知っている人はいますか? 2 台の異なるマシンで問題を再現しましたが、結果はまったく同じでした。
マシン 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 で時々発生します。