我在Postgresql中有一个表和一个hstore类型的列。这需要hstore
扩展名。不小心我从Postgresql中删除了这个插件,该列消失了。我重新安装了插件但是列仍然缺失。是否可以检索丢失的数据?
答案 0 :(得分:2)
您使用了DROP SCHEMA public CASCADE
。
这会丢弃所有依赖于架构的对象。
hstore
已安装在公共架构中。当它被删除时,hstore
类型的列依赖于它。 PostgreSQL为它丢弃的每个对象发出一条消息,包括那些列。
(如果您不使用CASCADE
,Pg会告诉您如果使用CASCADE
,它会丢弃的内容。
立即停止数据库 ,并在数据库停止时立即进行文件系统级备份。
如果您还没有更新表内容,因为数据可能仍然存在,并且可能通过对PostgreSQL的系统目录进行一些手术来恢复。
然后你可以(可能)破解pg_attribute
中的列以指向oid
类型的新hstore
并清除attisdropped
以获取该列。也许。不要在主副本上尝试这样的事情,必须在您为此目的开始的备份副本上执行此操作,以防它变得更糟。
自从您删除列以来更新的任何行可能已经永远消失了。它可能可能它们仍然可以在磁盘上并且只设置了xmax,在这种情况下pg_dirtyread
可以看到它们。如果他们被VACUUM
编辑并被覆盖,那么他们就不会回来了。