(旧) kano-e no memo

こっちは更新してません

テーブル構成の違うデータベースにデータを移す

よくある話だと思いますが。

  1. 誰がつくったのかよくわからない古いシステム
  2. ほかはみんなMySQLなのにそのシステムに限ってPostgreSQL
  3. システムを作り直す話
  4. ついでにデータベースもMySQLに変更
  5. 当然テーブルも設計はまるっきり変更に
  6. てことは、PostgreSQLの古い設計から、MySQLの新しい設計に既存のデータ移さなくちゃいけない

で、SQLクックブック ―データベースエキスパートのための実践レシピ集に載っていた、SQL文を生成するSQL文てのを前から一度やってみたかったので、INSERT文を生成するSQL文を書きました。

SELECT '
  INSERT new_table1(new_column1, new_column2)
    SET(' || old_column1 || ', \'' || old_column5 || '\');
  INSERT new_table2(new_column3, new_column4)
    SET(' || old_column2 || ', ' || old_column4 || ');
' as insert
FROM old_table;

こんな感じで、実際には、一つのテーブルから、INSERT文4つ作ってます。
後はこれを適当なファイルに書き出して、mysqlに渡すだけ。
条件つけくわえるのも楽だし、件数も指定できるし、CASE文仕込めばかなり柔軟に変更に対応できるし、何より手順が少なく済んでるので幸せです。