テーブル構成の違うデータベースにデータを移す
よくある話だと思いますが。
- 誰がつくったのかよくわからない古いシステム
- ほかはみんなMySQLなのにそのシステムに限ってPostgreSQL
- システムを作り直す話
- ついでにデータベースもMySQLに変更
- 当然テーブルも設計はまるっきり変更に
- てことは、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文仕込めばかなり柔軟に変更に対応できるし、何より手順が少なく済んでるので幸せです。