Bonjour,
Je fais appel à vous car j'ai un problème de compréhension du mécanisme rollback après consultation de nombreux exemples de la doc et du web.
Voici le cas qui m'interesse et donc le contenu de la requête sql que je veux envoyer :
begin isolation level serializable;
insert into table1 ...;
insert into table2 ...;
insert into table3...;
select * from table4 ...;
update (les champs de la table4) ...;
commit;
Je souhaite donc que les opérations du bloc soient réalisée séquentiellement et intégralement. Dans un programme de test en utilisateur isolé, pas de problème.
Si pour prévenir tout problème j'intégre un rollbak comment faut-il procéder
1) oter le commit ; envoyer la requête, tester l'erreur puis envoyer une autre requête avec soit commit soit rollback ?
2) intégrer un savepoint dans le bloc ci-dessus et finir par rollback ? mais quand va-t-il s'executer ? automatiquement tout seul ?
3) un savepoint est-il nécessaire ou l'intruction rollback fait-elle revenir en début de bloc ? où continue le code ? y-a-t-il alors un retry ?
4) s'il n'y a pas de commit, la requête est-elle quand même executée et peut on alors savoir avec pg_last_error s'il y a une erreur et valider la requête avec l'envoi d'un commit ou forcer une restitution de contexte avec l'envoit d'un rollback ?
Note: J'envoie directement mes requêtes sql à postgres à partir de mon code php ; je n'utilise pas d'autre couche logicielle.
Merci
Partager