2010-11-03 5 views
1

Je programme en Perl et ai une connexion existante (progammatiquement) avec ma base de données postgres. Une fois la connexion établie, je ne contrôle pas le code de connexion, je veux désactiver l'autocommit.connexion postgresql et paramétrage autocommit désactivé

Comment fait-on cela? Quand je le fais de manière interactive, je ne vois aucun changement. Je désactive l'autocommit, puis fais un insert et je vois le changement. Je fais un rollback, j'arrive il n'y a aucune transaction existe.

Je souhaite désactiver la validation automatique, effectuer mon travail, puis valider. Comment peut-on accomplir cela avec une connexion existante?

Merci Reza

+1

une raison quelconque vous ne pouvez pas utiliser une transaction régulière? –

Répondre

5

Vous ne devriez pas désactiver autocommit dans un milieu de connexion, car il est inattendu et sujette aux erreurs.

Le mieux est de commencer explicitement et terminer les transactions en utilisant quelque chose comme ceci:

$dbh->begin_work(); 
foreach($statement1, $statement2, $statement3) { 
    $dbh->execute($_) 
    or do { $dbh.rollback(); return -1 } 
} 
$dbh->commit(); 

begin_work() transformerons temporairement auto-validation, jusqu'à commettre suivant ou rollback.

Mais si vous pensez que vous avez vraiment besoin de vous blesser, alors perl ne vous empêchera pas:

$dbh->{AutoCommit} = 0; 
+0

exactement ce dont j'avais besoin, merci beaucoup. – reza

Questions connexes