我不确定我是如何陷入这种情况的,但最近我们的应用程序无法从一个特定表中删除任何行。我检查过,我们甚至无法从 psql shell 中删除它。这是错误:
vnms=# delete from alarm_action where id = 12345678;
ERROR: Delete is pending, will be blocked
(12345678是一个无效的、不存在的ID。错误立即返回,没有停顿)
在我看来,有某种与alarm_action表关联的“删除待处理”标记,因为我可以很好地从其他表中删除行。但我不确定那个标记在哪里。我试图在互联网上搜索错误消息,但没有成功。然后我尝试从 github 下载 postgresql 源代码,但也找不到该错误消息。
我也:
“删除待处理”错误也很奇怪,因为它专门与某些删除有关。如果它只是一个锁,它要么会挂起一段时间(在等待锁时),要么返回类似“无法获取锁”的信息。
我也确信这是 Postgres 的内部工作,而不是因为我们数据库中的另一个表保持了这种持久状态。即使我们愿意,我们也不知道该怎么做!
有人知道这条消息“删除正在等待,将被阻止”是什么意思吗?它是如何被追踪以及如何解锁的?谢谢。
我现在找到原因了。有人在某个时候添加了一个触发器进行测试,该触发器错误地阻止了该表上的所有删除。 因为它是一个触发器,所以它在所有操作中都保留在数据库中:重命名、备份、恢复。