如何修复 "uncommitted xmin from before xid cutoff needs to be frozen, automatic vacuum of table "db.pg_catalog.pg_largeobject"

How to fix "uncommitted xmin from before xid cutoff needs to be frozen, automatic vacuum of table "db.pg_catalog.pg_largeobject"

PostgreSQL 数据库错误日志一整天都在生成此错误并且到第二天仍然继续错误

[23523] ERROR:  uncommitted xmin 53354897 from before xid cutoff 210760077 needs to be frozen
[23523] CONTEXT:  automatic vacuum of table "xxxx.pg_catalog.pg_largeobject"
[23523] ERROR:  uncommitted xmin 53354897 from before xid cutoff 210760077 needs to be frozen
[23523] CONTEXT:  automatic vacuum of table "xxxx.pg_catalog.pg_largeobject_metadata"

错误涉及系统目录(pg_catalog.pg_largeobjectpg_catalog.pg_largeobject_metadata)。

我需要有关如何修复它或如果我在这 2 个表上禁用 autovacuum 会受到什么影响的帮助。

注:

您正在经历数据损坏,如果您不采取行动,您将走向灾难:如果 autovacuum 不断失败(它将会失败),您最终将足够接近事务 ID 环绕,以至于您的数据库将停止接受交易。

创建一个新的数据库集群,使用 pg_dumpall 转储损坏的集群,将其恢复到新集群并删除旧集群。

您是 运行 一个旧的次要版本(当前是 11.10),因此您缺少大约一年的错误修复。原因可能是软件错误或(更常见的)硬件问题。

正如 Laurenz 告诉您的那样,是数据损坏,但您不必转储和恢复。

如果你的行注册表不是那么重要,可以通过xmin号53354897删除。

为了更安全,您可以在之前转储并在之后删除,从而实现无停机时间。

就我而言,该错误发生在日志中 table,我可以将其删除而不会造成任何数据损坏。

观察:如果数据损坏,即使删除有问题的行,也必须检查硬件和数据完整性。