如何在Web请求期间限制数据库查询时间?

cla*_*ion 8 django postgresql performance

我们在postgresql 9.0上运行了一个非常典型的django应用程序.由于管理界面中的搜索效率低下,我们最近发现了一些运行时间超过4小时的数据库查询.虽然我们计划修复这些查询,但作为一种安全措施,我们希望人为地将数据库查询时间限制为15秒 - 但仅限于Web请求的上下文中; 批处理作业和芹菜任务不应受此约束的约束.

我们怎么做?或者这是一个可怕的想法?

Mat*_*ood 21

执行此操作的最佳方法是设置仅用于运行Web请求的角色/用户,然后在该角色上设置statement_timeout.

ALTER ROLE role_name SET statement_timeout = 15000
Run Code Online (Sandbox Code Playgroud)

所有其他角色将使用statement_timeout的全局设置(在库存安装中禁用).