Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 sqlite2 vs sqlite3   Alex Kicelew   19 Apr 2005 04:00:25 
Архивное /ru.linux/135048c136548.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional