подключение postgresql и отключение автофиксации

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

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

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

Спасибо, Реза


person reza    schedule 03.11.2010    source источник
comment
По какой причине вы не можете использовать обычную транзакцию?   -  person Frank Bollack    schedule 03.11.2010


Ответы (1)


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

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

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

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

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

$dbh->{AutoCommit} = 0;
person Tometzky    schedule 03.11.2010