4 votes

Retour à un moment précis avec PostgreSQL

Existe-t-il un moyen de revenir à un point de départ spécifique ? Je cherche quelque chose comme ceci.

Démarrer point_spécifique ;

Après cela, une autre application connectée avec le MÊME login va insérer et supprimer des données (webservices avec des opérations grossières). pendant environ 2 minutes pour faire des tests. Chaque appel de webservice est déclaré comme une transaction avec Spring Ws.

Après cela, je veux revenir au point spécifique pour avoir une base de données propre à un état antérieur connu.

Je pensais que ROLLBACK TO SAVEPOINT foo ; était la solution mais pas malheureusement ?

Une idée ?

Configuration : PostgreSQL 8.4 / Windows XP

Salutations

1voto

h0tw1r3 Points 2512

Deux options rapides :

  1. Créez une base de données temporaire en utilisant la base de données primaire comme modèle, abandonnez la base de données temporaire lorsque le test est terminé.
  2. Journal du tableau pourrait être utile pour mettre en œuvre quelque chose.

0voto

Frank Heikens Points 29270

Cela n'est possible que si toutes vos applications partagent la même connexion à la base de données. Elles ne peuvent pas créer leur propre connexion. Vous pourriez faire cela avec un pool de connexion, en autorisant seulement une connexion. Si quelqu'un peut créer sa propre connexion, la partie est terminée. Des connexions différentes ne peuvent pas partager la même transaction.

0voto

Magnus Hagander Points 8671

Les SAVEPOINTs ne fonctionnent qu'à l'intérieur d'une transaction, ce qui signifie une seule connexion.

Vous pouvez construire quelque chose à partir de PITR, qui vous permet de faire une rétablir à un moment précis dans le temps. Vous aurez besoin d'une sauvegarde de base pour travailler, ainsi que des fichiers journaux archivés, mais cela vous permet de remonter à un moment précis. Ce n'est pas aussi "pratique" que ce que vous semblez rechercher, mais cela fonctionne.

0voto

Laurenz Albe Points 40920

Je suppose qu'une telle exigence est destinée à des fins de test.

Il existe l'alternative suivante :

  • Au point précis, déconnectez tous les utilisateurs de la base de données et clonez-la :

    CREATE DATABASE mydb_template
       TEMPLATE mydb
       ALLOW_CONNECTIONS FALSE
       IS_TEMPLATE TRUE;
  • Ensuite, laissez les tests faire leur travail.

  • Pour restaurer la base de données, déconnectez tout le monde de celle-ci et exécutez

    CREATE DATABASE mydb TEMPLATE mydb_template;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X