2017-06-12 3 views
0

Ma question:Comment stocker une petite information dans un fichier sans en perturber le contenu?

Comment conserver la version actuelle de mon logiciel dans un fichier de vidage généré par PostgreSQL?


La raison de ma question:

J'ai développé un logiciel JAVA en utilisant la base de données PostgreSQL. Le logiciel est installé localement sur l'ordinateur de chaque utilisateur, et la base de données est également locale et individuelle pour chaque utilisateur.

J'ai créé une fonctionnalité pour que les utilisateurs puissent sauvegarder leurs bases de données et les restaurer. Pour cela, mon code JAVA s'exécute pg_dump pour générer le fichier de sauvegarde et pg_restore pour le restaurer. Autrement dit, la sauvegarde est rien de plus qu'une décharge de la base de données générée par la commande suivante:

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

Le problème est que je lance habituellement les mises à jour logicielles. Les nouvelles versions du logiciel sont toujours compatibles avec les vidages des versions précédentes. Cependant, les anciennes versions du logiciel ne sont pas compatibles avec les vidages générés par une version plus récente.

Parfois, il arrive qu'un utilisateur tente de restaurer une version récente de la sauvegarde dans une ancienne version du logiciel, qui n'est pas compatible.

Je voudrais que le fichier de vidage ait les informations sur la version du logiciel qui l'a généré. De cette façon, je pourrais simplement afficher un message informant l'utilisateur qu'il a besoin de télécharger la version la plus récente du logiciel afin de restaurer la sauvegarde.


Je pensais que des deux formes ci-dessous, mais je pense qu'ils ne sont pas appropriés:

  1. Pour enregistrer la version du logiciel du nom de fichier de vidage. Ce serait mauvais parce que l'utilisateur pouvait renommer le fichier.
  2. Pour concaténer la version dans le contenu du fichier de vidage. J'ai peur que le fichier de vidage pourrait en quelque sorte être corrompu dans le processus de en entrant du texte à l'intérieur ou en train de supprimer le texte de celui-ci (avant de restaurer l'image).

Existe-t-il un meilleur moyen d'ajouter cette information au fichier de vidage?

+0

Je vous recommande de créer votre propre fichier zip de sauvegarde qui contient deux fichiers: la sauvegarde de la base de données et la version de votre application. –

+1

@viniciussss vous pouvez mettre les versions de l'application comme un commentaire dans la première rangée du fichier sous-traité –

+0

@PrashantSaraswat J'ai peur que la commande zip puisse parfois générer un fichier corrompu qui n'a pas pu être décompressé plus tard. Je ne suis pas expérimenté avec ça. Est-ce que ça fait du sens? Ou il est 100% sûr et il n'y a aucune chance de la commande zip pour générer un fichier corrompu? – viniciussss

Répondre

1

Une idée serait de stocker les informations dans une table spéciale à l'intérieur de la base de données.

La table n'est pas utilisée normalement et vous y écrivez la bonne version avant d'effectuer une sauvegarde.

Avant de restaurer la décharge tout, vous devez d'abord restaurer uniquement cette table:

pg_restore --table dump_version -d mydatabase dumpfile.dmp 

Ensuite, vous vérifiez ce qui est dans la table et agir en conséquence.