DBD::SQLiteのトランザクション
perlで、DBIからDBD::SQLiteを使う場合のトランザクションの扱いについて。
トランザクションの開始
AutoCommit属性やbegin_workメソッドを使うと、その後のinsert,update等で
database is locked(5) at dbdimp.c
が出てステートメントの実行に失敗してしまう場合がある。
これらを使わずにSQL文で"begin immediate"を実行した場合はこの問題は出ない。
トランザクションの終了
こちらも、DBIでのAutoCommit関連の挙動を回避するためにSQL文で"commit"する方が良いようだ。また、同じデータベースにアクセスしている他のプロセス/スレッドがSHAREDロックを守っている場合、commitは何もせずにエラーで戻ってくる。待機リトライループを書く必要がある。
The Definitive Guide to SQLite
- 作者: Mike Owens
- 出版社/メーカー: Apress
- 発売日: 2006/05/31
- メディア: ハードカバー
- クリック: 15回
- この商品を含むブログ (4件) を見る