3

R 3.0 に更新し、DBI を含むすべてのパッケージを更新しました。驚いたことに、私がよく使用するスクリプトが機能しなくなりました。

dbConnect を使用して MySQL データベースに接続できません。コードスクリプトは即座に実行されるため、数行で問題が再現されます

> require("RMySQL")
> m = dbDriver("MySQL")
> dbConnect(m, user = 'user', password = 'pass', dbname = 'dbname', host = 'localhost', client.flag = CLIENT_MULTI_STATEMENTS)

Error in as.integer(from) : 
cannot coerce type 'S4' to vector of type 'integer'
Calls: dbConnect ... mysqlNewConnection -> isIdCurrent -> as -> asMethod

また、次のように試しました:

dbConnect(MySQL(), user = 'user', password = 'pass', dbname = 'dbname', host = 'localhost', client.flag = CLIENT_MULTI_STATEMENTS)

しかし、同じ問題

他のパラメータも削除しようとしましたが、dbDriver から同じ問題が発生しました。

最新の更新で DBI パッケージに何が変更されましたか? どうすればこれを修正できますか?

DBI パッケージが孤立していることに気付いたので、誰に尋ねたらよいかわかりません。

4

2 に答える 2

1

私はまだ問題を掘り下げていますが、この問題の複数の原因を特定したと思います。ルートでは、R が S4 オブジェクトを期待しているが、代わりに整数を返すことに関係しています。これらは通常、接続の確立に失敗した結果だと思います。

なぜ失敗するのですか?私が気付いたことの 1 つは、多くの接続を閉じるのに失敗した場合 (最大 16 [ドライバー ハンドル コールで指定された最大接続数を参照してください] 開いた場合)、DBI は新しい接続を開かない/できないということです。必要に応じて呼び出しdbDisconnectていることを確認してください。通常、この種の問題は適切なエラー メッセージが表示されますが、上記のエラーが発生する場合もあります。可能であれば、抽象化レイヤーを介して DB にアクセスします。dplyrデータベース接続を監視し、非アクティブな場合は強制終了する人もいます。一方、関数で接続を開いて関数が壊れた場合、AFIK は、dbConnect への最初の呼び出しからドライバー オブジェクトを返さない限り、開いている接続を閉じる方法がありません。この場合、R のインスタンスを再起動するしかありません (マシンをリセットし、ワークスペースもクリアする可能性があります)。

私が最近遭遇したもう 1 つの問題は、RMySQL が RPostgreSQL をマスクすると、RPostgreSQL が失敗することです。逆は当てはまらないようですが、他の人がここでRPostgreSQLが同じエラーメッセージを表示していると述べているため、注目に値するようです.

アップデート

RMySQL の最新バージョン (0.10.1) は RPostgreSQL を終了したようです - RPostgreSQL は現在、ロード順序に関係なく動作しません。RMySQL に取り組んでいる同じ人々が RPostgres ( https://github.com/rstats-db/RPostgres ) に取り組んでいるようで、RPostgreSQL の代わりにそのパッケージを使用する場合、この競合は問題にならないようです。具体的には、dbConnect でドライバを指定する場合RPostgres::Postgres()の代わりに使用します。RPostgreSQL::PostgreSQL()dplyr などの他のパッケージは、現在 RPostgreSQL を前提としているため、この問題は引き続き発生する可能性があります (ただし、解決策が検討されているようです ( https://github.com/rstats-db/RMySQL/issues/28 )。

于 2015-01-06T12:42:07.803 に答える
1

ubuntuのR 3.0.1でも同じ問題がありました。

RMySQL パッケージの最新バージョンをインストールすると、問題が解決しました。

> install.pacakges("RMySQL")

インストール後、必ず R を再起動してください。

于 2013-06-21T03:24:02.180 に答える