本番環境のPostgreSQLに格納されたデータを開発環境のSQLite3に持ってくる

Ruby on Rails 3.0で本番環境はPostgreSQL、開発環境はSQLite3を使うときのように本番環境はPostgreSQL、開発環境はSQLite3を使っている。デバッグなどのために本番環境のデータを開発環境に持ってきたいときがある。そこで、yaml_dbを用いてデータを移行する。

本番環境での作業

まず、yaml_dbをインストールする。Gemfileに以下を追記する。

gem 'yaml_db'

その後、bundleでインストール。

% bundle install --without development

本番環境のデータを吐き出す。吐き出されたデータは db/data.yml に格納される(日本語文字列はバイナリーで扱われるみたい)

% rake  db:data:dump

開発環境での作業

まず、yaml_dbをインストールする。Gemfileに以下を追記する。

gem 'yaml_db'

その後、bundleでインストール。

% bundle install --without production

本番環境からdata.ymlを持ってくる。それをdb/data.ymlとして保存し、以下のコマンドで読み込む。

% rake  db:data:load

追記

PostgreSQLの方で生成したdata.ymlをSQLite3で読み込む。そして、そのSQLite3でdata.ymlを生成し、PostgreSQLに読み込ませる。すると、一部のデータが文字化けする。原因は、yaml_dbでは日本語文字列はバイナリデータとして扱われるのだが、文字列の先頭がascii文字だと英文と判断されて、binaryデータでは保存されないみたい。この部分で文字化けが起こっている。