3

hdbcMySQL データベースに接続して、およびを使用して SQL クエリを実行しようとしています。hdbc-odbc

main :: IO ()
main = do
  mysqlSettings <- readMySQLSettings
  putStr "Connecting to MySQL database..."
  mysqlConn <- connectODBC $ buildMySQLConnectionString mysqlSettings
  putStrLn "Connected"
  _ <- run mysqlConn "USE np" []
  putStrLn " Done."

データベースは正常に接続しますが、その後 SQL クエリを実行すると ( _ <- run mysqlConn "USE np" [])、次のエラーが発生します。

SqlError {seState = "", seNativeError = -1, seErrorMsg = "Tried to use a disposed ODBC Connection handle"}

私の理解では、接続が作成されるとすぐに接続が解放されるというエラーが表示されているようです。この問題は、リモート データベース (この場合は Amazon RDS) に接続する場合にのみ発生し、ローカルの MySQL インスタンスでは発生しません。

4

2 に答える 2

1

これは、内部で を使用する ODBC ドライバーを使用している場合に発生すると思いますlibmysqlclient。問題は、libmysqlclientシグナルによって中断されたシステムコールを再開せず、GHC ランタイムがシグナルを内部的に使用することです。

を参照すると、これを回避する方法がわかりますDatabase.HDBC.MySQL.withRTSSignalsBlocked。簡単に言えば、この関数ブロックはSIGALRMSIGVTALRMコード ブロックの実行中に GHC ランタイムによって使用されます。この関数を直接使用することも、依存したくない場合は単にコピーすることもできますHDBC-mysql

于 2021-11-15T06:22:00.260 に答える