首页 > 解决方案 > 带有 where 子句“COLUMN_1 为空”的 PostgreSQL 选择查询挂起

问题描述

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

select *
from table
where COLUMN_1 is null

在我们的一张表中查询,查询只是挂起(冻结)并且永远不会完成。同一张表上的其他查询运行良好并distinct(COLUMN_1)返回所有值。同一查询在另一列上正确运行COLUMN_2 is null。那一栏似乎有问题。

我该如何修理这种可能损坏的桌子?

标签: postgresqlpostgresql-9.6

解决方案


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

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

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


推荐阅读