【发布时间】:2017-06-12 19:53:48
【问题描述】:
我的问题:
如何将我的软件的当前版本存储在 PostgreSQL 生成的转储文件中?
我的问题的原因:
我使用 PostgreSQL 数据库开发了一个 JAVA 软件。该软件安装在每个用户的本地计算机上,数据库也是本地的,每个用户都是单独的。
我创建了一项功能,以便用户可以备份和恢复他们的数据库。为此,我的 JAVA 代码运行 pg_dump 来生成备份文件并运行 pg_restore 来恢复它。也就是说,备份只不过是下面命令生成的数据库的转储:
pg_dump.exe -U myuser -h localhost -p 5432 -Fc -f bkpname.bkp mydb
问题是我通常会启动软件更新。该软件的新版本始终与以前版本的转储兼容。但是,旧版本的软件与新版本生成的转储不兼容。
有时用户会尝试在不兼容的旧版本软件中恢复最新版本的转储。
我希望转储文件包含生成它的软件版本的信息。这样,我可以简单地显示一条消息,通知用户他需要下载最新版本的软件才能恢复备份。
我想到了下面的两种形式,但我觉得不太合适:
- 将软件版本保存为转储文件名。会很糟糕 因为用户可以重命名文件。
- 连接转储文件内容中的版本。我耽心 转储文件可能会在处理过程中以某种方式损坏 在其中输入文本或在删除文本的过程中 (在恢复转储之前)。
有没有更好的方法将此信息添加到转储文件中?
【问题讨论】:
-
我建议您创建自己的备份 zip 文件,其中包含两个文件 - 数据库备份和您的应用程序版本。
-
@viniciussss 您可以将应用版本作为注释放在转储文件的第一行
-
@PrashantSaraswat 我担心 zip 命令有时会生成一个损坏的文件,以后无法解压缩。我没有经验。是否有意义?或者它是 100% 安全的,并且 zip 命令没有机会生成损坏的文件?
-
zip 损坏文件的可能性为 0。压缩文件现在是相当标准的。如果你不想压缩它,你也可以创建一个 tar。
-
你可以在没有
-Fc的情况下运行pg_dump,只需将任何字符串附加到/**/之间或--之后的转储文件,然后将其压缩以减小大小
标签: java postgresql file pg-dump pg-restore