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

Requêtes PostgreSQL Discussion :

UPDATE et point de sauvegarde [9.2]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut UPDATE et point de sauvegarde
    Bonjour,

    Je suis amené à mettre à jour (update) beaucoup de lignes par transaction.
    J'éprouvais le besoin d'avoir un aperçu du résultat de la transaction afin de m'assurer que j'obtenais bien le résultat attendu avant de valider.
    Je me suis donc tourné vers les points de sauvegarde dont le peu que je connaissais me laissait supposer la chose possible.
    Si effectivement on peut revenir à un état antérieur (rollback) grâce au savepoint, n'y a-t-il pas moyen de visualiser le (pré)resultat, s'arrêter, regarder et décider de lancer le rollback ou pas ?
    comme une sorte de ctrl+z ...
    car ce que je vois est qu'un rollback renvoie à un état sans pour autant permettre de voir d'où l on revient (sauf erreur de ma part).
    A moins que cela ne soit pas avec ces opérateurs ?
    D'avance merci pour vos conseils,

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Par quelle interface vous lancez les commandes de transactions?
    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    la derniere version de pgadmin3.

  4. #4
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Avec pgadmin III le mieux serait de le faire par pgscript.
    Sinon tu peux utiliser un langage évolué (java avec jdbc, .NET ou ACCESS avec ADO ...) pour lancer des commandes BEGIN, SAVEPOINT, ROLLBACK, COMMIT... avec condition (même principe qu'avec pgscript).
    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    merci.
    Je vais regarder du coté de pgscript donc.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par Leehan Voir le message
    Je suis amené à mettre à jour (update) beaucoup de lignes par transaction.
    J'éprouvais le besoin d'avoir un aperçu du résultat de la transaction afin de m'assurer que j'obtenais bien le résultat attendu avant de valider.
    Je ne suis pas sûr de bien comprendre.
    Tout d'abord j'ai l'impression que cet update est du one shot.

    Quand vous démarrez une transaction les données modifiées sont accessibles (lisibles) par la session qui a modifié les données.
    Il n'est pas nécessaire de valider les données pour voir les modifications, par contre si vous souhaitez voir les données avant modification pour faire une comparaison visuel, il faudra ouvrir une autre session avant le commit/rollback de la 1ere.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    test=# select * from t;
     c
    ---
     1
    (1 ligne)
     
     
    test=# begin transaction isolation level read committed;
    BEGIN
    test=# update t set c = 2;
    UPDATE 1
    test=# select * from t;
     c
    ---
     2
    (1 ligne)
     
     
    test=# rollback;
    ROLLBACK
    test=# select * from t;
     c
    ---
     1
    (1 ligne)
     
     
    test=#

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Je ne suis pas sûr de bien comprendre.
    Tout d'abord j'ai l'impression que cet update est du one shot.
    [/code]
    absolument

    d'ou ma volonté de "controler" le resultat avant de "valider".

    ma question plus simplement est de savoir si et alors comment on peut revenir en arriere après une transaction si elle ne correspond pas au resultat desiré.

    merci pour le code : je regarde asap.

    edit : tu executes ton code avec psql (?), je peux le faire egalement. Ca me fer juste aller et venir entre psql et pgadmin3 que j'utilise plus souvent.

  8. #8
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    skuatamad
    Cette technique est aussi possible avec pgadmin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin transaction;
    INSERT ...|DELETE ...|UPDATE ...;
    SELECT...;
    rollback;
    commit;
    Il suffit de sélectionner et exécuter commande par commande.
    Mais je préfère lancer le tout dans un seul code, parce que une transaction (par principe) ne doit pas attendre une intervention utilisateur.
    @+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    selectionner et executer commande par commande ?
    tiens...me semblait avoir essayé auparavant et sans succés

    je vais (re)tester...
    merci

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    re

    psql :
    je lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update "Activite"."Ouvertures" 
       set geom = ST_Transform(st_setsrid(geom, 27572),2154)
    where gidoperef = 21 ;
    message d'erreur : la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc de la transaction.
    Ce message parait frequent mais d'après mes lectures les solutions sont diverses et variées et surtout compliquées pour moi

    pgadmin3 : je ne sais pas lancer commande par commande au sein d'une transaction comme le suggere alassanediakite

    merci

  11. #11
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Sélection de la commande puis...(fichier joint)
    @+
    Images attachées Images attachées  

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    Merci !
    Le triangle vert ok mais c'est pas tant lancer la requête que "selectionner une partie" de la requête qui me pose probleme
    J'ai l'impression que derriere le même mot, on met pas la même chose (?).
    pour moi selectionner = utiliser la souris pour surligner en bleu une partie de la requête, et puis appuyer sur le triangle vert (cf. Pj).
    en tout cas j ai pas réussi comme ca...
    (pas autonome le garçon...)
    Images attachées Images attachées  

  13. #13
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    C'est bien ça!
    Quel est le message d'erreur (s'il y en a)? Sinon ça doit marcher!
    @+

  14. #14
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par Leehan Voir le message
    message d'erreur : la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc de la transaction.
    D'après cet exemple disponible
    Erreurs et transactions

    Avec PostgreSQL, lorsqu'une erreur se produit dans une transaction, il n'est pas possible de l'ignorer. L'erreur doit être gérée. Sinon tous les ordres suivants sont également en erreur. De plus, à la fin de la transaction, il n'est pas possible de commiter. L'ordre COMMIT provoque en réalité un ROLLBACK.

    Exemple :
    mabase=> begin;
    BEGIN
    mabase=> insert into matable(valeur, nb) values ('c',2);
    INSERT 0 1
    mabase=> insert into matable(valeur, nb) values ('c',2);
    ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « u_matable »
    mabase=> insert into matable(valeur, nb) values ('d',2);
    ERREUR: la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc
    de la transaction
    mabase=> commit;
    ROLLBACK
    mabase=> select valeur, nb from matable;
    valeur | nb
    -------+---
    a | 2
    b | 2
    (2 lignes)

    mabase=>
    Ce message d'erreur semble lié à une erreur survenue précédemment dans la transaction.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    C'est bien ça!
    Quel est le message d'erreur (s'il y en a)? Sinon ça doit marcher!
    @+
    pas de message d'erreur :
    je lance le begin puis l update, enfin le commit -> l'update est bien effectué.
    je veux revenir en arriere : begin,rollback, commit -> je ne reviens pas à l'état initial. j'ai : ATTENTION: aucune transaction en cours

    La requête a été exécutée avec succès en 12 ms, mais ne renvoie...
    pourtant j'ai relancé le begin...
    car il est bien dit : Lancer ROLLBACK en dehors de toute transaction n'a pas d'autre conséquence que l'affichage d'un message d'avertissement.
    je vois pas...

  16. #16
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut Leehan
    Il faut savoir qu'une fois le COMMIT lancé (sans erreur), plus possible d'un retour à l'initial.
    Il faut d'abord vérifier par un select. Si le résultat est bon alors COMMIT sinon ROLLBACK.
    @+

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Par défaut
    Merci pour vos efforts.

    en conclusion :
    je n'y arrive pas avec pgadmin3 ;
    Et ce matin, je n'ai ps de message d'erreur avec le console psql.

    va comprendre Charles...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2007, 11h29
  2. Point d'interrogation dans UPDATE
    Par the_bmo dans le forum MySQL
    Réponses: 1
    Dernier message: 18/10/2006, 11h58
  3. sauvegarde live update
    Par remi77 dans le forum Windows XP
    Réponses: 2
    Dernier message: 12/10/2006, 06h41
  4. Utilisation des point de sauvegarde (SAVEPOINT)
    Par sto dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/01/2005, 18h35
  5. possible de sauvegarder ses points d'arrêts ?
    Par Merfolk dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/09/2004, 11h23

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