我正在使用PostgreSQL 8.4.15。在运行pg_dump
数据库备份时,出现以下错误:
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)
搜索此错误消息时,我发现了一些引用(此处和此处),它们建议为表重新编制索引。(在这些讨论中,有一个查询pg_class
表的参考以找到正确的pg_toast_XXXXXX
值,但似乎是因为在错误消息中未显示该值。我跳过了这一部分,因为在错误消息中显示了一个值我想这可能是因为PostgreSQL的更高版本而带来的便利。)
我执行以下操作:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
我现在可以正确使用pg_dump
。
什么是pg_toast
什么也这个命令的作用呢?这些仅仅是为了简单清理,还是可以摆脱该表中的某些行?首先是什么引起了该问题?
该表中大约有300000行,但是我希望自从上一次成功备份以来,大约只有250个新行(此表仅用于INSERT / SELECT,没有UPDATE)。
我发现了这个主意。您能检查您的情况是否相同吗?
—
dezso 2012年