Skip to content

data migrations after updating

Lan edited this page Oct 15, 2020 · 10 revisions

插件安装

插件主要包括

数据迁移之前需要先进行插件的安装,已引入缺失的migrations文件。

按如下步骤执行

  1. 先让网站跑起来,申请管理员权限的账户,并已此账户登录。
  2. 进入管理员页面admin/plugins,进行插件安装,完整引入上述三个插件的zip文件。(应该每安装一个插件都需要重启服务)。
  3. 插件安装完成之后才能进行数据迁移。在此之前先把当前的数据库删除(后面会再次创建)。
DROP DATABASE homeland

数据迁移

1. 创建一个临时的数据库

psql> CREATE DATABASE tmp_testerhome;

把数据导入临时数据库

cat forlantest.sql| psql tmp_testerhome

2. 调整临时数据库中的一些字段

> psql -d tmp_testerhome

tmp_testerhome=# ALTER TABLE topics RENAME excellent TO grade;
tmp_testerhome=# DROP TABLE  IF EXISTS posts;
tmp_testerhome=# ALTER TABLE users DROP COLUMN verified;

3. 把临时数据库中的数据导出

只需要导出数据不需要schema,同时也不需要导出migration,因为migration的数据需要通过db:migrate来生成

pg_dump --data-only -d tmp_testerhome  -T schema_migrations -T ar_internal_metadata > new_database

4. 创建真正的数据库

> bin/rails db:create
> bin/rails db:migrate

5. 把真实数据导入到新的数据库中

cat new_database | psql homeland

6. 迁移旧数据

> bin/rails c

> require "./db/migrate/20200721022652_migrate_profile_data.rb"
> MigrateProfileData.new.up

7. 搜索功能

数据迁移完成之后跑一下 bin/rails reindex重新创建索引。