IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Postgresql 9.1 commit/rollback


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2003
    Messages : 22
    Points : 25
    Points
    25
    Par défaut Postgresql 9.1 commit/rollback
    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

  2. #2
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Ce qu'il faut comprendre d'abord c'est ce qu'est une transaction. Je vous invite à consulter les cours de SQLpro sur ce forum sur le sujet ils sont très formateurs.
    Ce qu'il faut retenir c'est qu'une transaction sert à exécuter un ensemble de requêtes sur le serveur et amène votre SGBDR à en considérer l'ensemble comme si il n'y en avait qu'une seule.
    Un rollback sur une transaction va donc annuler toutes les actions effectuées par votre transaction et ramener votre serveur dans le même état qu'il était avant d'exécuter votre transaction.

    A partir de là, tout dépends de votre cahier des charges pour déterminer ce que vous souhaitez faire.
    Si votre transaction sert à valider une inscription sur votre site ou votre application par exemple et qu'en cas d'erreur vous souhaitez préserver l'inscription elle-même pour ne pas perdre l'information et éviter de rejouer les logs (wal sur postgres) pour les récupérer et voir où c'est situé le problème dans la transaction, il vous suffit de faire un savepoint juste après cette étape, et en cas d'erreur, faire un rollback to savepoint pour arriver à vos fins.

    Dans tous les cas, le commit ne doit pas être enlevé, il vous faut juste intégrer une gestion d'erreur au milieu.

    Cordialement,

    Jc.

Discussions similaires

  1. vérification auto de présence commit/rollback
    Par dinobogan dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 19/06/2008, 10h52
  2. Transaction SQL / COMMIT / ROLLBACK
    Par stephane.julien dans le forum C#
    Réponses: 4
    Dernier message: 24/09/2007, 12h14
  3. [Oracle 9i] Delete, undo, commit, rollback Best practices
    Par fguigui dans le forum Administration
    Réponses: 2
    Dernier message: 30/04/2007, 14h00
  4. Commit/Rollback sous VBA
    Par mastasushi dans le forum Access
    Réponses: 4
    Dernier message: 05/05/2006, 10h36
  5. PostgreSQL two-phase commit
    Par will82 dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/02/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo