由DROP SCHEMA ... CASCADE删除的列 - 我可以恢复数据吗?

时间:2014-07-01 11:33:19

标签: postgresql undo

我在Postgresql中有一个表和一个hstore类型的列。这需要hstore扩展名。不小心我从Postgresql中删除了这个插件,该列消失了。我重新安装了插件但是列仍然缺失。是否可以检索丢失的数据?

1 个答案:

答案 0 :(得分:2)

您使用了DROP SCHEMA public CASCADE

这会丢弃所有依赖于架构的对象。

hstore已安装在公共架构中。当它被删除时,hstore类型的列依赖于它。 PostgreSQL为它丢弃的每个对象发出一条消息,包括那些列。

(如果您不使用CASCADE,Pg会告诉您如果使用CASCADE,它会丢弃的内容。

立即停止数据库 ,并在数据库停止时立即进行文件系统级备份。

如果您还没有更新表内容,因为数据可能仍然存在,并且可能通过对PostgreSQL的系统目录进行一些手术来恢复。

然后你可以(可能)破解pg_attribute中的列以指向oid类型的新hstore并清除attisdropped以获取该列。也许。不要在主副本上尝试这样的事情,必须在您为此目的开始的备份副本上执行此操作,以防它变得更糟。

自从您删除列以来更新的任何行可能已经永远消失了。它可能可能它们仍然可以在磁盘上并且只设置了xmax,在这种情况下pg_dirtyread可以看到它们。如果他们被VACUUM编辑并被覆盖,那么他们就不会回来了。