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のコマンドも一発でいけたら楽な気もしたけどまずはエラーもなく文字もきれいに移行完了。
※MySQLとPostgreSQLではあらかじめ同構造のデータベース(テーブル)を構築済みの状況を想定してます。