【发布时间】:2021-05-05 15:28:29
【问题描述】:
我们在后端使用https://github.com/go-gorm/gorm/ ORM,并使用脚本连接到我们的 PostgreSQL 数据库。
有时,当脚本正在运行时,我们通过在本地按 Ctrl + C 或在生产中终止 pod/进程来手动终止作业。我们在所有脚本中都有一个defer DB.Close(),我还添加了处理 SIGINT / SIGTERM 信号以在 kill 时执行 DB.Close()。
问题是即使在关闭连接之后,任何已经运行的现有查询都不会被杀死并继续消耗数据库资源。有没有办法在直接从 gorm 或通过其他 hack 退出之前终止由该连接池启动的任何查询。
想过使用pg_backend_pid() 并使用pg_stat_activity 杀死查询,但是我们在运行新的pg_backend_pid() 时得到的pid 与运行的不一样。
版本:jinzhu/gorm v1.9.2
【问题讨论】:
-
这就是
context.Context的用途。你读过这个吗? -
参见文档的this section
-
同时处理 SO 停止信号。例如,如本文所述here
-
感谢@Flimzy @Matteo。
db.WithContextgorm 文档中提到的方法似乎不可用。我们目前在 v1 jinzhu/gorm v1.9.2。如果有任何我可以查看的示例,那将非常有帮助。同时也会阅读上下文。