所以这是永远挂起的查询:
ALTER TABLE tasks
ADD COLUMN in_progress BOOLEAN NOT NULL DEFAULT FALSE;
该表的tasks
行数少于 20,000 行,每 5 分钟左右查询一次。
我检查了pg_stat_activity
10 次,它从未显示任何锁定表的查询:
SELECT *
FROM pg_stat_activity
WHERE query LIKE '%tasks%';
--- No results
我尝试了真空吸尘器,但没有帮助:
VACUUM (VERBOSE, ANALYZE) tasks;
我还尝试添加没有约束和默认值的列,我希望它在这样的表上几乎是即时的,但是当我停止查询时它运行了 1 分钟:
ALTER TABLE tasks
ADD COLUMN in_progress BOOLEAN;
我在同一时间段内对另一个表(约 1000 行)运行了查询,它是即时的。
任何想法?
PostgreSQL 11.13
通过 DBeaver 执行的查询(我多次无效/重新连接以防万一)。
必须有人在桌子上持有锁,这意味着您有一个未结交易。那是一个错误;任何交易都不应该保持开放。
要找出哪些会话阻止了您的陈述:
在运行之前
ALTER TABLE
,运行运行挂
ALTER TABLE
。启动一个新的数据库会话并运行
其中 12345 是上一个查询的结果。
终止您在上一个查询中找到的会话