带有 where 子句 'COLUMN_1 is null' 的 PostgreSQL select 查询挂起

PostgreSQL select query with where clause 'COLUMN_1 is null' hangs

最近我们在没有停止数据库的情况下从创建的备份中恢复了 PostgreSQL 数据库(我知道这是非常错误的,现在我们正在付出代价)。备份是简单的数据库目录备份。 现在我们注意到当我们执行

select *
from table
where COLUMN_1 is null

在我们的一个 table 查询中查询只是挂起(冻结)并且永远不会完成。对相同 table 运行 的其他查询很好,distinct(COLUMN_1) returns 所有值。在另一列 COLUMN_2 is null 上正确查询 运行s。好像那一栏有问题。

如何修复可能损坏的 table?

使用 pg_dump 转储整个数据库并将其恢复 到新集群 。如果可行,它将消除所有数据损坏。

如果失败,您应该聘请专家。

如果您使用调试器附加到挂起后端,您可以调查它在做什么(如果您熟悉源代码)。

我运行 vacuum full 它解决了我的问题。查询现在在 table.

上使用 is null 子句执行