mysql - haskell `hdbc` ODBC 连接立即为远程 MySQL 实例处理

标签 mysql haskell odbc hdbc

我正在尝试连接到 MySQL 数据库并使用 hdbc 运行 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 实例则不会。

最佳答案

我想当您使用内部使用 libmysqlclient 的 ODBC 驱动程序时会发生这种情况。问题是,libmysqlclient 不会重新启动被信号中断的系统调用,而 GHC 运行时在内部使用信号。

您可以通过查看 Database.HDBC.MySQL.withRTSSignalsBlocked 了解如何避免这种情况。 .简而言之,此函数会阻止 GHC 运行时在执行代码块时使用的 SIGALRMSIGVTALRM。可以直接使用这个函数,如果不想依赖HDBC-mysql也可以直接复制。

关于mysql - haskell `hdbc` ODBC 连接立即为远程 MySQL 实例处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69969060/

相关文章:

postgresql - 如何配置 PostgreSQL ODBC 驱动程序

php - 我该如何更正此错误 : Data source name not found and no default driver specified

C# 全局页面变量

php - 尝试将两个分组查询合并为一个

regex - 提取 Haskell 中特定类型的所有出现

haskell - 为什么 Haskell(有时)被称为 "Best Imperative Language"?

mysql - ODBC 连接器支持 MYSQL 中的 utf8mb4

mysql - 用于获取 MySql 表行的事件处理程序

mysql - 添加 JOIN 和 ORDER BY 查询后性能意外提升

haskell - Haskell 中的状态 Monad 和 'put' 函数