小编Kai*_*Kai的帖子

PostgreSQL DELETE FROM 失败并显示“错误:试图删除不可见元组”

错误

尝试删除包含无效时间戳的元组

DELETE FROM comments WHERE date > '1 Jan 9999' OR date < '1 Jan 2000' OR date_found > '1 Jan 9999' OR date_found < '1 Jan 2000';
Run Code Online (Sandbox Code Playgroud)

结束于

ERROR:  attempted to delete invisible tuple
Run Code Online (Sandbox Code Playgroud)

一个 2009 年的邮件列表讨论了完全相同的错误消息,OP 修复了它,但我没有找到关于他是如何做到的或可能导致此错误的原因的解释。

由于谷歌搜索量不足以及我对 PostgreSQL 的了解有限,我很无助。

是什么导致了腐败

我在 Debian 8 上运行了 PostgreSQL 9.5.5 服务器(~4TB 数据,所有默认设置,内存限制除外),当时操作系统内核崩溃了——可能是在重建 /dev/md1 时交换所在的位置。在此之前,PostgreSQL 用一个 400GB 的日志文件吃光了几乎所有的磁盘空间。操作系统再也没有启动过,磁盘检查没问题,所以我从 LiveCD 启动并将每个块设备备份到映像,以防万一。我已经成功地从 /dev/md2 重建了 / 目录,fsck 显示了一个干净的文件系统,并且我已经将 PGDATA 文件夹备份到了一个外部硬盘上。

我做了什么来尝试恢复

在我格式化 md 设备并重新安装操作系统和新的 postgresql-9.5 之后,我停止了 PostgreSQL 服务器,将 PGDATA 文件夹移动并更改为 …

postgresql recovery corruption disaster-recovery postgresql-9.5

25
推荐指数
1
解决办法
2652
查看次数