gpt4 book ai didi

Postgresql 损坏的 pg_catalog 表

转载 作者:行者123 更新时间:2023-11-29 14:25:06 34 4
gpt4 key购买 nike

我一直在外部硬盘驱动器上运行 postgres 数据库,在将其重新连接到一台休眠的笔记本电脑(认为服务器仍在运行)后,该数据库似乎已损坏。在运行一堆重新索引命令来修复其他一些错误后,我现在收到以下错误。

错误:pg_toast_2618 中的 toast 值 12942 缺少 block 编号 0

返回此错误的命令示例是:

select table_name, view_definition from INFORMATION_SCHEMA.views;

我运行了命令“select 2618::regclass;”这给了你问题表。然而,重新索引似乎并不能解决问题。我看到很多关于查找损坏的行并将其删除的建议。但是,在我的实例中似乎已损坏的表是 pg_rewrite,它似乎不是损坏的行,而是损坏的列。

我已经运行了以下命令,但它们没有解决问题。

REINDEX table pg_toast.pg_toast_$$$$;
REINDEX table pg_catalog.pg_rewrite;
VACUUM ANALYZE pg_rewrite; -- just returns succeeded.

我可以运行以下 SQL 语句,它将返回数据。

SELECT oid, rulename, ev_class, ev_type, ev_enabled, is_instead, ev_qual FROM pg_rewrite;

但是,如果我将 ev_action 列添加到上面的查询中,它会引发类似的错误:

错误:pg_toast_2618 中的 toast 值 11598 缺少 block 编号 0

此错误似乎会影响对 INFORMATION_SCHEMA 表等内容的所有架构相关查询。幸运的是,似乎我的所有表和表中的数据都很好,但我无法查询生成这些表的 sql,并且我创建的任何 View 似乎无法访问(尽管我注意到我可以创建新 View )。

我对 Postgresql 不太熟悉,无法确切知道 pg_rewrite 是什么,但我猜我不能只截断表中的数据或设置 ev_action = null。

我不确定下一步该怎么处理我目前收集到的信息。

最佳答案

(至少)您的 pg_rewrite 目录存在数据损坏。该表包含所有 View 的定义,包括系统工作所需的系统 View 。

最好的办法是恢复备份。

您将无法让数据库恢复工作,您能做的最好的事情就是挽救尽可能多的数据。

尝试pg_dump。我不知道这是否需要任何意见,但如果有效,那就太好了。您必须明确从转储中排除所有 View ,否则很可能会失败。

如果这不起作用,请尝试对每个表使用COPY以至少获取数据。元数据将会更加困难。

如果这是一个重要的数据库,请聘请专家。

关于Postgresql 损坏的 pg_catalog 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698625/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com