MySQLからPostgresqlに移行するためのPHPコード

Shunsuke Sawada

herokuはMySQLをサポートしてないので、MySQLを使っている既存アプリをPostgresqlに移行してみた。
まぁheroku使いたいがためにデータベースを変更するってのもどうかと思いますが、実験がてら。Wordpressとかをherokuで無料で動かしたいって人にはちょっとは役に立つかも。

ここに可能性のある方法がならんでいます。
Converting from other Databases to PostgreSQL

いろんな方法がありますが、誰にでも取っつきやすい(?)、PHPでコードを書いてる人がいたので、使わせてもらいました。
バグレポート送ったんだけど、速攻で修正してくれた上に、律儀に名前まで載っけてくれてる…。なんか嬉しい。

PHP_my2pg

PHP_my2pg

Screen Shot 2014-02-07 at 3.22.45 PM

PHP_my2pgのページにSource codeがあるので、それをコピペ保存して、その中に自分のMySQLとPostgresqlの接続情報を埋めて実行。オプションに自分のデータベースの名前を忘れずに。
 

1
$ php my2pg.php your_database

これでMySQLからデータを取り出して、Postgresqlにテーブルつくって、データ挿入までぐわーっとやってくれる。

my.cnfに以下を追加しないと、データを抽出する段階で日本語が化けるかも。

1
2
[mysqld]
skip-character-set-client-handshake

テーブル構成とかを抜き出してCreate文とかをPostgreql用に書き換えてくれてるのが、実行結果から分かります。ご利用は自己責任で。実行前にバックアップを取りましょう。
 
無事に移行できた後にアプリをテストすると「Primary Keyが重複してレコードが作れません」みたいなエラーが出るかもしれません。そんな時はSequenceを疑ってみて、値がおかしければSELECT setval('users_id_seq', 100);とかで設定し直してあげればいいかと思います。
  

PaaSのメリット

サーバーのセッティングに時間をかけずにアプリが作れるのが個人的には一番大きい。
さくらのVPSを契約してたけど、そろそろやめようかなと思ってる。あんまり使ってないのにお金だけ払っててね…。

PaaSというかherokuのメリットは、

とにかくアプリのコードを書きたくてサーバーのことは忘れたい!
という人にはおススメです。

20
Shunsuke Sawada

おすすめの記事

CakePHPをテスト環境から本番環境へ移行する時の、基本的なコマンドとかをメモ。
EC2でインスタンスを立ち上げてCapistranoでGithubからWordpressをデプロイするまで
Duplicate entry '127' cakePHPでsave時にエラーが出る