MysqlからPostgresへ移行
カテゴリ[
Postgres
]
PostgresからMysqlへの移行記事は良く目にするが、MysqlからPostgresへの移行はあまりなかったのでまとめ。
(まあ下の参考URLの人のがあるんだけど・・)
MySQLからエクスポート
余分な文字等を取り除くこの後下記のPostgresにインポートするやり方で進めればデータは入るのだが、移行データに余計な文字などが入る場合があるので、その場合はエクスポートしたcvsから予め取り除く必要がある。
今回行った際には改行の箇所に「\」マークが入ってしまった。
tr -d '\\\n' < [Table_name].csv > [Table_name]_remove.csv
PostgreSQLへインポート
予めインポート先のDBは作っておく。
その後、ログインして以下のコマンドを実行。
参考URL
(まあ下の参考URLの人のがあるんだけど・・)
MySQLからエクスポート
echo "SELECT * FROM [TABLE_Name] INTO OUTFILE '/opt/tmp/[DB_Name]/[TABLE_Name].csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';" | mysql -u root [DB_Name]これを各テーブルごとにやってく。
余分な文字等を取り除くこの後下記のPostgresにインポートするやり方で進めればデータは入るのだが、移行データに余計な文字などが入る場合があるので、その場合はエクスポートしたcvsから予め取り除く必要がある。
今回行った際には改行の箇所に「\」マークが入ってしまった。
excerptに変な以下のコマンドで取り除いてく。
----------
,"あああ","\ ←\マーク
もじもじ",2,3
----------
が入る。
tr -d '\\\n' < [Table_name].csv > [Table_name]_remove.csv
PostgreSQLへインポート
予めインポート先のDBは作っておく。
その後、ログインして以下のコマンドを実行。
echo "COPY [TABLE_Name] FROM '/opt/tmp/[DB_Name]/[TABLE_Name].csv' WITH CSV NULL AS '\\\\N' escape '\\\\' ;" | psql -U postgres [DB_Name]auto incrementだったcolumnのlastIDを揃える
ERROR: duplicate key violates unique constraintとか出たらindexのlast_valueと該当tableのselect max(id) ...の値が等しいか確認。違っていたらserial型でエラーになるのでsetvalでlast_valueを更新する。
select setval('[TABLE_Name]_id_seq', (select max(id) from [TABLE_Name] ));これでシーケンスのIDも一致する。
参考URL
- MySQLからPostgreSQLへのデータ移行
- 【SQL】ISNULLみたいにNULL値を置き換えるCOALESCE関数
- PostgreSQL を入れ替えたらエントリーできなくなった
- ハセテツラボ PostgreSQLの最近のブログ記事
- PostgreSQL 7.2.3 リファレンスマニュアル REINDEX
- PostgreSQL 7.2.3 リファレンスマニュアル COPY
- MySQLで開発したシステムをPostgreSQLに移行...
- 徹底比較!! PostgreSQL vs MySQLパート2 第1回:同じようで違うデータ型
- 【初級】新人SEのためのSQLの基礎 第1回(後半) 演算の優先順位,ソートの注意点
- Webプログラマー+WebデザイナーなZARU日記 MySQLとPostgreSQLの日付フォーマットの違い
- MySQLでテーブルをCSVに書き出す
- CSVから入力(インポート)する方法
http://kapi.jp/kapi_blog/217
2009年03月03日
関連カテゴリ Postgres