発端
モバイル端末の内部DBにマスタデータを持たせる要件が降りてきて、サンプルのデータをいただいた。
ファイル形式はspl。
開発時、DB Browser for SQLite を用いてテーブルデータを参照している。
いただいたマスタデータの量が膨大だったこともあり、どうにかsplファイルをいい感じにインポートできないかなと考えた。
ゴール
要するに「SQLiteでリストア」ができれば、良さそう。
環境
macOS Sonoma14.4.1
DB Browser for SQLite 3.12.2
手順
- ターミナル経由で .dbファイルのパスを指定し、SQLiteコマンドラインツールを起動
- SQLファイルの確認と修正
- .readコマンドを使用してダンプファイルを実行する
.dbファイルのパスを指定し、SQLiteコマンドラインツールを起動
ターミナルを立ち上げて、SQLiteコマンドラインツールを起動。
sqlite3 [dbのパス]
例えば、Documentディレクトリにある「database.db」を指定したときは以下。
sqlite3 /Users/User/Document/database.db
誤ったパスを指定していたとしても、SQLiteコマンドラインツール自体は起動できるため、注意が必要そうです。
SQLファイルの確認と修正
SQLファイルには、SQLiteと互換性のないコマンドが含まれていることがある。
そのため、エラー文を確認し、必要に応じてSQLファイルに含まれるSQLite非互換のコマンド(例:SET DEFINE OFF
など)をコメントアウトしたり、互換性のない関数を書き換えたり、調整を行う必要が発生することがある。
- SQLファイルに含まれるSQLite非互換のコマンド(例:
SET DEFINE OFF
)をコメントアウトする例
sed -i.bak 's/^SET DEFINE OFF/-- SET DEFINE OFF/' /Users/User/Document/GitHab/SUMPLE_DATA_TABLE.sql
.readを実行する
sqlite> .read [リストア元のファイルのパス]
例えば、リストア元のファイルが /Users/User/Document/GitHab/SUMPLE_DATA_TABLE.sqlにある場合、
sqlite> .read /Users/User/Document/GitHab/SUMPLE_DATA_TABLE.sql
となります。
作業時の確認点
- SQLファイル内のSQLite非互換のコマンドや関数を修正する際、影響範囲を確認する
- データベースへ正しいパスで接続できている
- 正しくデータがインポートされている