俺の開発研究所

Ruby on Rails、Linux、Windowsを中心にIT技術系の備忘録とか。よく忘れるので。

*

MySQLのLOAD DATA INFILEコマンドでテキスト・CSVファイルデータをインポート

      2016/04/01

MySQLは、LOAD DATA INFILEコマンドというもので、テキストファイルやCSVファイルのデータをインポートすることができる。

今回、LOAD DATA INFILEコマンドを使用するのは、PostgreSQLからMySQLへデータ移行するため。

PostgreSQLのpg_dumpコマンドで取得したバックアップファイル内のデータは、COPYコマンドを使用してタブ区切りのデータをインポートできるようにエクスポートされるが、MySQLにCOPYコマンドはなく、LOAD DATA INFILEコマンドを使用する必要があるようです。

なお、今回のバージョンは以下です。

  • Windows 10 Pro(64bit)
  • MySQL 5.5

スポンサード リンク

LOAD DATA INFILEコマンドの基本的な使い方

LOAD DATA INFILEコマンドの構文は以下のよう。

データファイルが先頭行なし、タブ区切り、フィールド囲み文字なし、改行コードCR+LF(\r\n)の場合、オプションは特に何もいらない。
それらをコマンドオプションで指定することができる。

データファイルをMySQLのdataフォルダに置いて実行することになるので、実行ユーザーにFILE権限を付与する必要がある。
データファイルを任意の場所に置いて実行する場合は、FILE権限は不要で、「LOAD DATA LOCAL INFILE」とすればOK。

実際のコマンドラインから実行するサンプルはこのような感じ。

インポート時に警告などが出た場合は、SHOW WARNINGSコマンドで確認しよう。

PostgreSQLからMySQLへのデータ移行

PostgreSQLのpg_dumpコマンドで取得したバックアップファイル内のデータを使用し、MySQLのLOAD DATA INFILEコマンドを使用する場合、以下の項目でエラーとなった。

  • boolean型の項目
  • timestamp型の項目

まず、PostgreSQLでboolean型の項目は、データはt/f(true/false)の文字列で抽出されていたが、MySQLではtinyint型(1桁)となる。
なので、t/fを0/1へと置換してやる必要があった。

次に、PostgreSQLのtimestamp型の項目をMySQLのdatetime型の項目へと変換しようとしていたので、データの小数点以下の秒数を切り捨てた。

以上で、無事にインポートできました。

参考サイト

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.6 LOAD DATA INFILE 構文
LOAD DATA INFILE構文:データのインポート | Smart

 - MySQL, PostgreSQL