Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
j'utilise la version 1.12.1 et je voudrais savoir comment désactiver l'autocommit ?
Merci
Hors ligne
Dans l'éditeur de requêtes, cela se trouve dans le menu Query, case à cocher "Auto-rollback".
Guillaume.
Hors ligne
dans la fenêtre "Query",
j'ai bien le menu "Requête"
j'ai coché "ROLLBACK Automatique"
j'ai exécuté une requête de type update...;
puis j'ai fait "rollback;" sans aucun effet...
Pouvez-vous me dire pourquoi ?
Merci
Hors ligne
Il faut décocher le ROLLBACK automatique, pas le cocher. Et n'oubliez pas de faire un BEGIN avant votre UPDATE. Sinon, la transaction est immédiatement exécutée. C'est le fonctionnement interne de PostgreSQL qui veut ça.
Guillaume.
Hors ligne
Ok,
est-il possible de faire comme avec Sqlplus d'oracle :
tant que le commit n'a pas été fait, c'est dans le 'schéma virtuel de la session', un rollback à la fin permet de revenir à l'état initial.
exemple :
voici un script sql qui modifie temporairement une donnée, le temps d'un count(*)
update maTable set mois=10 where id=1;
select count(*) from maTable where mois=10;
rollback;
Merci
Hors ligne
Non, ce n'est pas possible.
Guillaume.
Hors ligne
alors tant pis.
merci
Hors ligne
Ça n'est pas possible avec pgadmin, mais avec psql, on peut:
\set AUTOCOMMIT off
marc=# CREATE TABLE toto (a int);
CREATE TABLE
marc=# ROLLBACK ;
ROLLBACK
Si on veut que ça soit systématique, il suffit de mettre ça dans le .psqlrc
si on rajoute dans le fichier psqlrc
\set ON_ERROR_ROLLBACK INTERACTIVE
on a le même comportement par défaut qu'Oracle: tout ordre en erreur est automatiquement annulé, et on revient à l'état juste avant (ça fait des savepoints automatiquement dans le dos de l'utilisateur). Le 'INTERACTIVE' demande de ne le faire que pour des commandes manuelles, et pas pour un script.
Marc.
Hors ligne
Oui, ça se fait application par application.
Guillaume.
Hors ligne
merci de ces précision,
mais mon besoin est pour être plus précis :
comment éviter que toutes les opérations de modification/insertion/suppression soient effectives dès leur exécution.
Je voudrais l'équivalent d'Oracle, où sans la commande COMMIT, seule l'instance qui a exécuté ces ordres voit les résultats.
Et ce n'est qu'après avoir fait le COMMIT que les changements sont effectifs en base (ou le ROLLBACK pour l'annulation).
Michel
Hors ligne
Un simple begin au début de vos commandes ne suffit pas ?
Julien.
https://rjuju.github.io/
Hors ligne
Vous devez absolument faire un BEGIN, que ce soit fait automatiquement par l'application (par exemple psql) ou manuellement. Mais vous ne pouvez pas faire autrement. Il n'y a pas moyen de configurer le moteur pour qu'il s'en passe.
Guillaume.
Hors ligne
Juste un petit complément
J'ai testé différentes interfaces graphiques avec PostrgreSQL (version 9.1 sous Linux)
A ma connaissance, la seule dans laquelle on peut désactiver l'autocommit (sans avoir à démarrer explicitement une transaction avec BEGIN comme expliqué par gleu ci-dessus) est RazorSQL.
Sinon j'ai aussi testé Tora, là aussi c'est officiellement implémenté, mais çà ne marche pas.
RazorSQL et Tora sont des outils multi-bases (donc qui supportent d'autres bases que PostgreSQL, telles que Oracle, MySQL, etc.). Tora est sous Linux, RazorSQL sous Linux, MacOS ou Windows.
Tora est opensource, RazorSQL propriétaire et payant (69$). RazorSQL me semble vraiment être au-dessus du lot, je trouve que ça vaut les 69$. L'éditeur SQL est notamment bien plus fourni que celui de PGAdminIII ou de Tora, avec des petites astuces bien sympathiques (autocomplétion avec le nom des tables, ce qui évite bien des fautes de frappes, etc...)
Hors ligne
Pages : 1