后
$ 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