SQLite – 異なるDB間でテーブルをコピー

Pocket

データベース new.dbのテーブル table1に別のデータベースold.dbのテーブルtable1のデータを丸ごとコピーしたい場合*1、SQLiteではnew.dbを開いた後、ATTACH DATABASE でold.dbをアタッチすることでスムーズに処理することができた。各table1はDB名を接頭辞としてmain.table1、old.table1という風にしてアクセスする。後はINSERT文を発行するだけだが、PRIMARY KEYが指定されている列をINSERTしようとするとエラーが発生するので列名を指定する必要があった。最後はDETACH DATABASEして処理完了である。

c:sql>sqlite3.exe new.db
sqlite> ATTACH DATABASE 'old.db' AS old;
sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             c:sqlnew.db
2    old              c:sqlold.db
 
sqlite> BEGIN;
sqlite> INSERT INTO main.table1(c1,c2,c3) SELECT c1,c2,c3 FROM old.table1;
sqlite> COMMIT;
sqlite> DETACH DATABASE old;

関連:SQLite Query Language: ATTACH DATABASE

  1. table1の構造はどちらも同じとする []

コメントを残す

メールアドレスが公開されることはありません。