|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Alex Kicelew 2:5020/400 19 Apr 2005 04:00:25 To : All Subject : sqlite2 vs sqlite3 -------------------------------------------------------------------------------- Hi. Это я дурак, или в sqlite3 напрочь поломали само понятие транзакции? Ситуация. Запущена программа, работающая с базой. В данный момент она выполняет длительную транзакцию. Запускается вторая программа, работающая с той же базой. В sqlite2 она тупо ждала, пока первая программа освободит эксклюзивный лок, после чего начинала работать. В sqlite3 она вылетает с SQLITE_BUSY при первой же попытке записи в базу. Причем не на commit'e, как сказано в документации (что можно было бы отловить, хоть и занудный идиотизм), и не на begin_work, а на первом update. Да, разумеется, это глушится/отлавливается RaiseError/eval, но оно ж подыхает посреди транзакции, успешно выполнив необходимое чтение и добравшись до записи. Программы на перле, DBD::SQLite 1.08. От значения busy_timeout это не зависит никак. Интерфейса к busy_handler в DBD нет. С типами транзакций играться не пробовал, ибо удобного DBI-интерфейса к ним тоже нет, а перелопачивать всю программу (которая рассчитана на то, что выполняется с AutoCommit => 1 и begin_work/commit в нужных местах) слишком долго. -- Alex Kicelew <ark@mir.glasnet.ru> ICQ 3887592 --- ifmail v.2.15dev5.3 * Origin: Zone X (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/135048c136548.html, оценка из 5, голосов 10
|