pg_dump:来自服务器的错误消息:错误:pg_toast_16418 中缺少 toast 值 43712886 的块编号 0

pg_dump:来自服务器的错误消息:错误:pg_toast_16418 中缺少 toast 值 43712886 的块编号 0

$ pg_dumpall -U postgres -f /tmp/pgall.sql 

我看到以下内容:

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  missing chunk number 0 for toast value 43712886 in pg_toast_16418
pg_dump: The command was: COPY public.page_parts (id, name, filter_id, content, page_id) TO stdout;
pg_dumpall: pg_dump failed on database "radiant", exiting

我没有之前的备份。我该如何修复?

提前致谢。

答案1

这意味着您的数据库由于某种原因基本上已损坏。

您需要做的是尝试逐行(一次一行)访问表 page_parts,以确定哪一行已损坏,然后删除该行。执行此操作的最简单方法可能是执行 SELECT * FROM page_parts LIMIT ,然后对表中的行进行二进制搜索(从中间开始,将每部分切成两半等)。一旦确定了行,就将其删除,然后您应该能够转储数据库的其余部分。一旦有了行,您还可以识别它是哪一列,当然,如果数据价值很高的话。

答案2

谢谢。创建简单的脚本。

514 -- 从 page_parts 中选择 count(*)

for ((i=0; i<514; i++ )); do psql -U postgres radiant -c "SELECT * FROM page_parts LIMIT 1 offset $i" >/dev/null || echo $i; done

ERROR: missing chunk number 0 for toast value 43712886 in pg_toast_16418
433

相关内容