MySQL上のテーブルデータをPostgreSQL上に移行

MySQLでデータベース組んでたけどやっぱPostgreSQLにしようってこととかそーないですね。
けどEC-CUBE使ってたらありました。
しかも完全に設定ミスでMySQLのデータベース設定ちゃんとしてなかったからphpMyAdminからエクスポートしてphpPgAdminでインポートするとかっていう方法はムリ…。
もっと言うと作成するテーブルの照合順序を設定してなかったから作られるテーブルの照合順序が「latin1_swedish_ci」になってしまって、システムからは正常に動作してるように見えてたけど実際の中身はぐちゃぐちゃになってた反省してます。。。おかげでphpMyAdminから参照したらマルチバイト文字が化け化けです。
なので既存データのエクスポートとインポートはコマンド叩いてやるはめに。

MySQL上の既存データのエクスポート

まずはデータをエクスポートさせる為のディレクトリを作成。

mkdir /home/eccube_data
chmod 777 /home/eccube_data


MySQL上の「eccube_db」データベース全データをCSV形式にてエクスポート。

mysqldump -u root -p --tab=/home/eccube_data/ --default-character-set=latin1 --fields-enclosed-by=\" --fields-terminated-by=, --fields-escaped-by=\\ eccube_db


で完了。

PostgreSQLへデータのインポート

まずはPostgreSQLにログイン。

psql -U postgres


エクスポートさせた「/home/eccube_db」ディレクトリ内のCSVファイル分だけ以下のようにデータインポートコマンドを発行。

copy mtb_work from '/home/eccube_data/dtb_baseinfo.txt' with null as '\\N' csv escape as '\\';


今回はエラーが出てないかは一コマンドずつ実行させながら目視確認てことで。
PostgreSQLのコマンドも一発でいけたら楽な気もしたけどまずはエラーもなく文字もきれいに移行完了。


MySQLPostgreSQLではあらかじめ同構造のデータベース(テーブル)を構築済みの状況を想定してます。