使用Ping查看Golang中的DB连接是否处于活动状态

时间:2018-01-10 21:56:43

标签: go

只是ping数据库以检查我的golang应用程序是否仍然连接或是否有比这更好的解决方案是否安全?我在某处读过,我们不应该使用.ping()来确定连接丢失。

感谢。

2 个答案:

答案 0 :(得分:5)

执行简单查询并检查结果可能更好。 Ping()方法可以安全使用,但可以由数据库驱动程序实现。

请参阅Ping()

答案 1 :(得分:3)

我想说Ping()是这样做的方法,如果你需要在程序启动时单独测试运行查询的连接。

通常情况下,我只相信数据库/ sql会自动尝试重新连接,以防您对DB执行查询并且连接失败。因此,您可以使用Open来检查数据库连接args是否正确,并且信任查询以在连接丢失时返回错误。

人们说Ping()可能导致竞争条件,但无法证明我如何或提供需要连接测试的合适替代方案。

Gorm(广泛使用的Golang ORM项目)就是这样做的:

// Send a ping to make sure the database connection is alive.
    if d, ok := dbSQL.(*sql.DB); ok {
        if err = d.Ping(); err != nil {
            d.Close()
        }
    }
    return

https://github.com/jinzhu/gorm