MySQLからPostgresqlに移行するためのPHPコード
herokuはMySQLをサポートしてないので、MySQLを使っている既存アプリをPostgresqlに移行してみた。
まぁheroku使いたいがためにデータベースを変更するってのもどうかと思いますが、実験がてら。Wordpressとかをherokuで無料で動かしたいって人にはちょっとは役に立つかも。
ここに可能性のある方法がならんでいます。
Converting from other Databases to PostgreSQL
いろんな方法がありますが、誰にでも取っつきやすい(?)、PHPでコードを書いてる人がいたので、使わせてもらいました。
バグレポート送ったんだけど、速攻で修正してくれた上に、律儀に名前まで載っけてくれてる…。なんか嬉しい。
PHP_my2pg
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のメリットは、
- サーバーのセッティングに時間がかからない
- 小さいアプリなら無料で運営できる
- スケールできる
- Addonで機能拡張もお気楽
とにかくアプリのコードを書きたくてサーバーのことは忘れたい!
という人にはおススメです。