Bonjour,
Je rencontre un petit soucis avec la gestion des transactions dans PgAdmin III.
La version que j'utilise est la dernière (1.10), sur un serveur Postgresql 8.3.7.
Voici le problème : quand je crée une transaction dans un script SQL sous PgAdmin, et que, par hasard, il y a une erreur dans une des lignes du script, PgAdmin procède à un ROLLBACK complet de la transaction depuis le début.
L'ajout de points de sauvegarde n'y change strictement rien...
Prenons un exemple simple :
Si je retente un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 begin; create temp table toto (id int); insert into toto values (1); select * from tot; -- là je fais une erreur
J'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from toto;
Si j'ajoute un point de sauvegarde :ERROR: relation "toto" does not exist
********** Erreur **********
ERROR: relation "toto" does not exist
État SQL :42P01
Le rollback au point de sauvegarde renvoie l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 begin; create temp table toto (id int); insert into toto values (1); SAVEPOINT mon_pointdesauvegarde; select * from tot; select * from toto; rollback to mon_pointdesauvegarde;
Si j'exécute le même script en console psql, la restauration au point de sauvegarde fonctionne parfaitement, et ma table toto est toujours là.ERROR: ROLLBACK TO SAVEPOINT can only be used in transaction blocks
********** Erreur **********
ERROR: ROLLBACK TO SAVEPOINT can only be used in transaction blocks
État SQL :25P01
D'où ma question : comment utiliser les points de sauvegarde dans PgAdmin ? Je me doute qu'il s'agit d'un problème de blocs de transaction, mais comment faire ?
Ca éviterait d'avoir à relancer des parties de traitements particulièrement longs quand on a une erreur un peu plus bas dans un gros script sous PgAdmin...
Merci d'avance de votre aide,
ced
Partager