« PostgreSQLへ....その2 | メイン | PostgreSQLへ...その4?? »
PostgreSQLへ....その3
2004年08月12日
今回の目的は、「MySQL → PostgreSQL」のデータのお引越しです。

お互い異なるRDBMS、どうしたらよいのでしょう?

『Create命令とInsert命令があればなんとかなるさ!』

っと思っていた私の甘い考えは打ちのめされました(笑)。

mysqldumpで吐き出されたSQLを、PostgreSQL上で実行すると、エラーの連続でした。

見てみると、長さの指定されたint型やauto_increment機能など。
MySQL独自の機能を使っている部分が問題なのです。
仮に手作業で変換したとしても、その変換後の姿がMovableTypeがPostgreSQLで実装している方法とは異なるかもしれません。

う~ん、コマッタ。

そこで、ogawaさんが提供してくださっている、
mt-sql2db.cgi: mt-db2sql.cgiの逆変換CGIを使ってみることにしました。

前回、BerkeleyDBからMySQLへのお引越しのときには、MT3.0にもれなくついてきた、mt_db2sql.cgiというスクリプトを使いましたが、これと逆のことをしてくれます。

そこで、

MySQL ──(mt_sql2db.cgi)─→ BerkeleyDB ──(mt_db2sql.cgi)─→ PostgreSQL

という変換ができるのではないかな?
っと考えました。

んで、これ、成功しちゃいました!!

実は、今このエントリーのコンテンツはPostgreSQLに納まっています。

データベースの中身の文字コードはUTF-8。

でも、psql上で

=> \encoding euc_jp

とタイプすれば、表示はEUC_JPで行われます。

さっそく日本語を検索してみました。
=> select entry_title from mt_entry
-> where entry_id = 25;
      entry_title
------------------------
 Audi newA6見てきました
(1 row)

感激っ。

あれこれ迷ってきた文字コードのことについて、これでやっと終止符が打てます。

心なしか、再構築もちょっぴり速くなった気がするのです。
いろいろな情報をくださった方、素敵なスクリプトを提供してくださった方、とても感謝しています。

(追記)
その後、スキーマを見つけてしまいました(汗)。
MTをインストールしたディレクトリの直下にschemasというディレクトリがありますが、
この中に、mysql.dump postgres.dump sqlite.dumpと、それぞれのスキーマがありました。
postgres.dump

こちらを利用して移行することも可能です。(最初はそのつもりでいたので)
でも、スクリプトを使ったコンバートのほうが断然楽かと思います。

投稿者 megu : 2004年08月12日 18:00

コメント

なんかうまく行っちゃったみたいですね!
素晴らしーいっ!!

投稿者 (o) [TypeKey Profile Page] : 2004年08月12日 19:14

思っていたよりすんなりとうまく行って、とてもうれしいです。
(o)さんのスクリプトがなかったら、まだまだ私四苦八苦していたと思います。
これからはバックアップに使わせていただきますね~。
どうもありがとうございます。


投稿者 megu [TypeKey Profile Page] : 2004年08月13日 02:13

コメントしてください




保存しますか?