2013年11月25日月曜日

SQLite 外部ファイルからSQL文を読み込む

SQLiteでは.readコマンドを使うと、外部ファイルからSQL文を実行できる。
これを使えば外部のデータベースからSQL文をエクスポートして移植することも夢ではない!
今回はphpMyAdminを使ってMySQLから移植してみた。

参考サイト

MySQLからSQL文を出力する


phpMyAdminならデータベースのトップに移動してエクスポートから。
mysqldumpというコマンドを実行させてもいい、っぽい。

オプションを弄って1行ずつの出力にしておこう。
phpMyAdminなら「エクスポート方法」を「詳細」に設定して、
「すべての INSERT 文にカラム名を含める 」にチェックを入れればいい。
エラーが分かりやすくなる。

SQLiteに入力する


まずはなにも考えずに速攻移植さ!

/*---------------------------------------------------------------------------*/
sqlite3 .read hoge.sql
/*---------------------------------------------------------------------------*/

当然のごとく失敗。MySQLとSQLiteだと色々相違点があるので怒られるようだ。
それくらいは許容してくれもいいじゃないかよ、と思うけどそんなことは許さないSQLite。
phpMyAdminも「他のデータベースシステムまたは古い MySQL サーバとの互換性」とかいう
項目があるけど、SQLiteは含まれていない。
それ用のツールもないようなので、自力で変換する。

SQLファイルの変換


参考サイトを記載しておきつつ、なぜかエラー見ながら地道にやったばかたれちゃん。
機能をフルに使っているわけではないので他にもあるかもしれないけど、
大体以下の点に気をつければなんとかなった。
  • コメントアウト?(/*~*/;)されてる行は全て削除
  • 行頭にSETを含む行は全て削除
  • KEY関連の設定は全て削除
  • 少なくともPRIMARY KEYは保持できる。エラーでた気がしたんだけどな…。
  • テーブルのオプション(ENGINE, DEFAULT CHARSETなど)は削除
  • AUTO_INCRIMENTは削除
  • データベースへつけているコメント(COMMENT)は削除
  • ストアドルーチンを設定している箇所を削除
phpMyAdminで吐き出したsqlファイルということ前提。
エラーで怒られてるところを全部消して行けばいずれたどり着く。
正直、参考サイトのほうが良くまとまっているので、そっちを参考にしたほうが絶対いい。

今度こそSQLiteに出力する


コマンドを実行してエラーが出なければ成功。
ちゃんと移植できているか中身を確認しておこう。

0 件のコメント:

コメントを投稿