如何在没有备份的情况下恢复PostgreSQL数据库

4

忘记备份了。现在我有一个带有数据库的硬盘和一个空的Postgres系统。我能通过简单地复制文件等方式来恢复数据库吗?


最好去 ServerFault。 - Barry Brown
2
请确保将来进行备份;-) - ChristopheD
3个回答

6
如果您拥有旧的postgresql系统的完整数据目录(且版本相同或仅差一个修订号),则可以尝试将其放置在新的postgresql安装中的数据目录中,以替换原有的数据目录。(当然,在执行此操作之前,请先停止postgres服务器。)
这基本上是在升级postgresql时使用的相同过程,无需备份和恢复。
编辑:如评论中所指出的那样,我假设不仅版本相同(或几乎相同),而且架构也相同(32-64位,Linux-Windows等)。

2
请注意,它还必须是相同的架构(32位或64位),而且我认为是相同的平台(Linux、Solaris、Windows等)。 - Matthew Wood

3
除了leonbloy的回答外,您可以尝试使用pg_migrator,特别是如果您需要从8.3升级到8.4(最终到9.0)。

2
在您的情况下,您已经拥有了文件,但如果没有的话,也许只有可能,您可以通过数据库日志来做些什么。您可以尝试查看数据库中语句的日志,通常位于/var/log/postgresql/postgresql.log中,如果存在或接近,并且在此之前设置了log_statements = 'mod'或'all',则可以恢复部分数据。
逐个表格搜索,在数据库的所有或最近的历史记录中搜索插入到这些表格中的内容。您可以使用一些Unix工具剪切文本,以获取仅语句并在每个语句的结尾添加";",以及其他重要的查询,如删除等。
但是您必须逐个表格进行操作,并且数据必须存在,而且数据库不能长时间运行而没有备份。
在某些情况下,您只需要最后一次操作或类似的东西就可以挽救局面。
然而,这仅适用于阿波罗13号灾难时刻,永远无法替代良好的备份。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接