MySQLのLOAD DATA INFILEコマンドでテキスト・CSVファイルデータをインポート | 俺の開発研究所

データベース|俺の開発研究所 データベース「データベース」の記事一覧です。

MySQLでは、LOAD DATE INFILEコマンドでテキストやCSVのデータを取り込むことができます。

この記事では、LOAD DATA INFIILEコマンドを使って、PostgreSQLからMySQLにデータを移動する方法を紹介します。

PostgreSQLのpg_dumpコマンドは、データをバックアップファイルにエクスポートします。その後、タブ区切りのデータはCOPYコマンドでインポートすることができます。しかし、MySQLにはCOPYコマンドはなく、LOAD DATA INFIILEコマンドが必要になります。MySQLにはCOPYコマンドはありません。LOAD DATA INFIILEコマンドが必要です。

以上がアップデート後のバージョンです。

  • Windows 10 Pro (64ビット)
  • MySQL 5.5

LOAD data INFILEコマンドは、基本的に使用します。

LOAD DATA INFILEコマンドの構文はこのようになっています。

LOAD DATA INFILE "[データファイル]"INTO TABLE [テーブル名];

データファイルが先頭行なし、タブ区切り、フィールド囲み文字なし、改行コードCR+LF( \r,n) の場合は、オプションは必要ありません。
これらのオプションは、コマンドオプションで指定します。

データファイルはMySQLのデータディレクトリに置かれてから実行される。そのため、コマンドを実行するユーザにはFILEパーミッションが必要である。
データファイルを任意の場所に置くにはFILE権限は必要ありません。単純に "LOAD DATE LOCAL INFILE" を使用します。

コマンドラインの実行例です。

--MySQL接続>mysql -u test_user -ptest_password>USE test_db;>LOAD DATA LOCAL INFILE ".\data.txt" INTO TABLE test_table;

インポート時に表示される警告は、SHOW WARNINGSコマンドで表示させることができます。

PostgreSQLからMySQLへのデータ移行

PostgreSQLのpg_dumpコマンドで作成したバックアップファイルのデータを、MySQLのLOAD DATA INNFILEコマンドで使用すると、以下のエラーが発生しました。

  • ブール型項目
  • タイムスタンプ型項目

まず、PostgreSQLではboolean型の項目はt/f(true/false)という文字列で抽出されますが、MySQLではtinyint(1桁)になっています。
そのため、t/fの値を0/1に置き換える必要があった。

次に、PostgreSQLのdatestamp型エントリをMySQLのdatetime型エントリに変換しようとしていたので、小数点以下の秒を切り捨てました。

インポートはスムーズに行われました。

以下のサイトを参照してください。

MySQL -:MySQL 5.6 Reference Handbook :: 13.2.6 LOAD DATA INFIILE Syntax
Smart | Smart

関連読書:

ドラゴンボール超 スーパーヒーロー:「ブロリー」より4年 新キャラが登場!

神作『無職転生~異世界行ったら本気出す~』の大推薦!

2022年夏|7月放送最新作TVアニメ情報まとめ!おすすめ6選を紹介!