我做这样的事情
LOOP
Exit when 1 = 2;
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'wiki';
pg_sleep(10);
END LOOP;
但这仅是第一次。
下次选择上次处理并尝试终止它们(它们已终止)并抛出异常。
它不会停止,但不会终止新连接。
为什么找不到新的连接?
Tnx
答案 0 :(得分:2)
pg_stat_activity
(和所有其他pg_stat_xx
视图)显示事务开始时间的快照。由于函数(包括do
块)总是在事务中执行,因此循环不会看到任何更改。
您需要致电pg_stat_clear_snapshot()
重置当前交易的统计快照,例如致电pg_sleep()
之后。