PostgreSQL:它是可能的恢复只有大对象与PostgreSQL?



我们有一个简单的表my_table:

id (int) -> primary key
object_id (Large Object)

不幸的是,我们的一个承包商对表my_tableobject_id列中的大型对象的id运行了lo_unlink

大对象ID还在表中,但是关联的大对象已经不存在了:

ERROR:  large object 10268782 does not exist
SQL state: 42704

我们每天晚上用pg_dump做备份。

如何用pg_restore还原大对象?

实际上,我们不需要恢复所有的表,甚至不需要恢复具有LOB ID的表(因为ID仍然是定义的),而只需要从转储中重新加载大对象到数据库中。

pg_restore有一个选项:

--data-only
Restore only the data, not the schema (data definitions). Table data, large objects, and sequence values are restored, if present in the archive.

,但我们不想恢复表数据或序列值。只有大物件。

谢谢

要仅从纯文本格式的转储中恢复大对象,可以执行以下操作:

  • 创建目录表;转储文件:

    pg_restore --list --file=tocfile dumpfile
    
  • 编辑tocfile,删除除BLOBS外的所有行,例如

    4353; 0 0 BLOBS - BLOBS
    
  • 现在只能恢复大的对象:

    pg_restore --use-list=tocfile --dbname=proddb dumpfile
    

这将覆盖数据库中的所有大型对象。如果您只想恢复某些大型对象,则没有简单的方法。您可以通过使用--file=lobs.sql而不是--dbname=proddb来运行最终的pg_restore来将SQL语句写入文件,这将创建一个包含所有大型对象的SQL脚本。您必须手动编辑该文件以提取所需的对象:^/

相关内容

  • 没有找到相关文章

最新更新