如何在文件中存储一小段信息而不会弄乱其内容?

时间:2017-06-12 19:53:48

标签: java postgresql file pg-dump pg-restore

我的问题:

如何将当前版本的软件存储在PostgreSQL生成的转储文件中?

我的问题的原因:

我使用PostgreSQL数据库开发了一个JAVA软件。该软件本地安装在每个用户的计算机上,数据库也是每个用户的本地和个人。

我创建了一项功能,以便用户可以备份他们的数据库并进行恢复。为此,我的JAVA代码运行pg_dump以生成备份文件,pg_restore运行以恢复它。也就是说,备份只不过是下面命令生成的数据库转储:

pg_dump.exe -U myuser -h localhost -p 5432 -Fc -f bkpname.bkp mydb

问题在于我通常会启动软件更新。新版本的软件始终与先前版本的转储兼容。但是,旧版本的软件与较新版本生成的转储不兼容。

有时会发生用户尝试在旧版本的软件中恢复最新版本的转储,这是不兼容的。

我希望转储文件能够获得生成它的软件版本的信息。通过这种方式,我可以只显示一条消息,通知用户他需要下载最新版本的软件才能恢复备份。

我想到了以下两种形式,但我认为它们不合适:

  1. 将软件版本保存到转储文件名。这会很糟糕 因为用户可以重命名文件。
  2. 连接转储文件内容中的版本。我耽心 转储文件可能会在某种程度上被破坏 在其中输入文本或在删除文本的过程中 (在恢复转储之前)。
  3. 有没有更好的方法将此信息添加到转储文件?

1 个答案:

答案 0 :(得分:1)

一个想法是将信息存储在数据库中的特殊表中。

表格未正常使用,您在执行转储之前将正确的版本写入其中。

在恢复整个转储之前,首先只恢复该表:

pg_restore --table dump_version -d mydatabase dumpfile.dmp

然后检查表格中的内容并继续进行。