【发布时间】:2021-09-12 12:24:23
【问题描述】:
我在 pg_stat_activity 上使用以下查询来查找当前正在运行的查询:
SELECT pid, age(clock_timestamp(), query_start), usename, query, *
FROM pg_stat_activity
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' and usename='<db_user>'
ORDER BY query_start desc;
我已使用以下查询为此用户设置了 satement_timeout 为 30 秒:
ALTER ROLE <db_user> set statement_timeout = 30000
我验证这是通过为 db_user 打开一个新会话来设置的:
show statement_timeout;
statement_timeout|
-----------------|
30s |
我运行了这个查询,它按预期在 30 秒后超时。
SELECT pg_sleep(31);
SQL Error [57014]: ERROR: canceling statement due to statement timeout
但是在此之后,当我运行第一个查询以查看正在运行的查询时,它也会向我显示超时查询
| pid | age | usename | query |
|---|---|---|---|
| 9133 | 00:00:54.366638 | <db_user> | COMMIT |
| 31551 | 00:01:49.70594 | <db_user> | ¶SELECT pg_sleep(31) |
为什么查询 pg_stat_activity 时仍然显示超时查询。我希望既然这个查询已经终止,它一定不会出现在 pg_stat_activity 中。
【问题讨论】:
标签: sql postgresql timeout psql pg-stat-statements