ローカルホスト(Win NT)にsqliteデータベースがあり、バックアップしたい。このタスクを実行するためにシェルコマンド「.backup」を使用したいと思います。しかし、バックアッププロセス中にデータベースに新しい行を挿入できるようです。
'.backup'シェルコマンドはデータベースで新しい排他的トランザクションを開始しますか?
'.backup'シェルコマンドを実行すると、データベースがロックされると思いました。
ローカルホスト(Win NT)にsqliteデータベースがあり、バックアップしたい。このタスクを実行するためにシェルコマンド「.backup」を使用したいと思います。しかし、バックアッププロセス中にデータベースに新しい行を挿入できるようです。
'.backup'シェルコマンドはデータベースで新しい排他的トランザクションを開始しますか?
'.backup'シェルコマンドを実行すると、データベースがロックされると思いました。
sqlite3 のバックアップ方法はデータベースをロックしません。データベースをロックしたい場合は、次の回避策を使用することをお勧めします。
INSERTステートメントを使用すると、データベースは予約済みロックを取得します。ただし、このINSERTステートメントは空にすることができます。ROLLBACKまたはを使用してトランザクションを終了しCOMMITます。コード:
BEGIN;
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0;
.backup <database> <file>
ROLLBACK;
'backup' という名前のテーブルを使用していて、各コピーに行 (日付など) を挿入している場合 (この情報が関連している場合) は、あまりハッキリしない方法です。