Почему может быть такое: делаю $dbh->do('BEGIN'); (update, insert...); $dbh->do('COMMIT'); С DBD::mysql всё нормально, с DBD::Pg постоянно warn'ит "there is already a transaction in progress" Не знаю, может, AutoCommit потому что исходно снят?
обычно, бегин_уорк — правильный путь. но, если б ты слушал меня раньше, то давно бы пользовался дбикс-коннектором, интерфейс которого, я считаю, правильнее и там эта тема так же решена
Попробую с begin_work'ом на всякй случай. Так-то я сам сохранял старое значение AutoCommit, потом делал BEGIN, все операции выполнял в try {} catch {} finally, в конце блока try делал commit, в catch делал rollback, в finally восстанавливал AutoCommit, если сохранённое значение отлично от текущего.