PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 04/10/2011 12:25:14

zephyrin
Membre

désactiver l'autocommit

Bonjour,

j'utilise la version 1.12.1 et je voudrais savoir comment désactiver l'autocommit ?

Merci

Hors ligne

#2 04/10/2011 12:29:12

gleu
Administrateur

Re : désactiver l'autocommit

Dans l'éditeur de requêtes, cela se trouve dans le menu Query, case à cocher "Auto-rollback".


Guillaume.

Hors ligne

#3 04/10/2011 13:29:19

zephyrin
Membre

Re : désactiver l'autocommit

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

#4 04/10/2011 14:40:42

gleu
Administrateur

Re : désactiver l'autocommit

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

#5 04/10/2011 14:50:17

zephyrin
Membre

Re : désactiver l'autocommit

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

#6 04/10/2011 15:12:13

gleu
Administrateur

Re : désactiver l'autocommit

Non, ce n'est pas possible.


Guillaume.

Hors ligne

#7 04/10/2011 16:55:57

zephyrin
Membre

Re : désactiver l'autocommit

alors tant pis.

merci

Hors ligne

#8 04/10/2011 17:05:24

Marc Cousin
Membre

Re : désactiver l'autocommit

Ç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

#9 04/10/2011 17:11:31

gleu
Administrateur

Re : désactiver l'autocommit

Oui, ça se fait application par application.


Guillaume.

Hors ligne

#10 06/10/2011 18:13:30

zephyrin
Membre

Re : désactiver l'autocommit

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

#11 06/10/2011 18:22:06

rjuju
Administrateur

Re : désactiver l'autocommit

Un simple begin au début de vos commandes ne suffit pas ?

Hors ligne

#12 06/10/2011 18:29:48

gleu
Administrateur

Re : désactiver l'autocommit

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

#13 30/10/2011 14:44:28

bebert73
Membre

Re : désactiver l'autocommit

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

Pied de page des forums