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

标签 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. 连接转储文件内容中的版本。我耽心 转储文件可能会在处理过程中以某种方式损坏 在其中输入文本或在删除其中文本的过程中 (恢复转储之前)。

是否有更好的方法将此信息添加到转储文件中?

最佳答案

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

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

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

pg_restore --table dump_version -d mydatabase dumpfile.dmp

然后检查表中的内容并进行相应操作。

关于java - 如何在文件中存储一小段信息而不弄乱其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44507674/

相关文章:

java - Spring工具套件maven项目localhost不工作

postgresql - 如何恢复 PostgreSQL 8.0 数据库

postgresql - 如何正确扫描 pq 数组?

file - Hadoop 作业从多个目录获取输入文件并在映射阶段检测每个文件

c - 当将输入从文件扫描到结构,然后保存更改时,为什么它总是写入第一行并删除其他所有内容?

java - 使用 BookmarkablePageLink 时保留 NestedTree 的状态(折叠/展开节点)

java - 查找 Eclipse 中实例化类的位置?

sql - 如何仅从 PostgreSql 中的预订返回工作时间?

c - 读取 2kb txt 文件时出现段错误 (c)

java - PCA 降维