Postgresql соединение и отключение автоматической фиксации - PullRequest
1 голос
/ 03 ноября 2010

Я программирую на Perl и у меня уже есть соединение (прогамматически) с моей базой данных postgres. После установления соединения я не контролирую код соединения, хочу отключить автокоммит.

Как это сделать? Когда я делаю это в интерактивном режиме, я не вижу никаких изменений. Я отключаю автокоммит, а затем вставляю, и я вижу изменения. Я делаю откат, получаю, что транзакции не существует.

Я хочу отключить автокоммит, выполнить свою работу, а затем зафиксировать. Как это сделать с существующим соединением?

Спасибо Реза

1 Ответ

5 голосов
/ 03 ноября 2010

Не следует отключать автокоммит в середине соединения, так как это неожиданно и подвержено ошибкам.

Лучше всего явно запускать и завершать транзакции, используя что-то вроде этого:

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

begin_work() временно отключит автокоммит до следующего коммита или отката.

Но если вы считаете, что вам действительно нужно навредить себе, Perl не остановит вас:

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