Skip to content

MySQL版からPostgreSQL版への移行手順

Yasuko Ohba edited this page Jul 15, 2019 · 25 revisions

概要

MySQL版からPostgreSQL版への移行手順を説明します。大まかな手順は以下のとおりです。

1. MySQL版でデータをPostgreSQL向けにエクスポートする

mysqldump -u[ユーザー名] -p [本番DB名] --compatible=postgresql -t -c --skip-quote-names --skip-extended-insert --skip-add-locks --default-character-set=utf8 | sed "s/\'/''/g" > dump.sql

2. インポート可能なPostgreSQL版のアプリ環境を作る

PostgreSQL版のアプリ環境を作り、最初のマイグレーション(20190712043808_initial_schema.rb)までが当たった状態にしてください。

rails db:migrate VERSION=20190712043808

  • ※それより後のマイグレーションを当てた状態では、1でエクスポートしたファイルをインポートできません。
  • ※このスキーマではエクスポートされたデータを受け取るために boolean カラムを integer カラムとしているため、そのままではアプリで利用できません。

3. 1で作ったスクリプト形式のファイルをpsqlで取り込む

psql database名 < dump.sql

  • ※psqlではなくpg_restoreで取り込みたい環境向けには、一度 psqlでの取り込み・pg_dumpでのアーカイブ形式のエクスポートを経由して行ってください。

4. 不要なマイグレーションの情報を削除する

3でインポートしたデータベースで以下のSQLを実行してください。

DELETE FROM schema_migrations WHERE version NOT LIKE '2019%';

  • ※新しい(2020以降の年が冠された)マイグレーションが存在しないことを想定しています。仮に次のステップに進んでから行う場合は、条件を適切に変更してください。

5. セッションデータを削除する

データベースで以下のSQLを実行してください。

DELETE FROM sessions;

6. PostgreSQL版のマイグレーションを最新まで適用する

rails db:migrate

7. 必要な環境変数を設定する