database - Rails 3 - 将大量数据从旧数据库模式移动到新数据库模式

标签 database ruby-on-rails-3 migration

几个月前我一直在开发一个应用程序。之后,决定对该应用程序进行一次大修。这涉及更改大量数据库模式。为了实现这个目标,我们选择在另一个分支上工作。当我们不得不进行迁移时,我们毫不费力地包含了处理数据库中可用的当前数据的代码,以便它与新的数据库模式兼容。这种发展以这种方式进行了几个月。现在,我们需要从旧数据库架构中获取所有数据并将其迁移到新数据库架构中。

这样的任务看起来很复杂,需要请教。是否有任何 gem 可以帮助解决这个问题?谢谢

最佳答案

首先,我假设您使用的是关系数据库(如 MySql),并且您有一些可管理的表。

这是一个涉及离散步骤的简单方法:

对于每个表,

  1. 为每个要导入的表编写 SQL 查询。一次或批量运行每个表导入。
  2. 在您的 Rails 控制台中,通过尝试实例化您的模型来验证数据。

但是,使用这种方法,您可能会遇到数据验证错误。

第二种方法可以使用 CSV。这里我假设您在 Ruby 1.9.3 中使用 CSV。您可以将其切换为对较旧的 Rubies 使用 FasterCSV。

  1. 将您的数据库导出为 CSV。
  2. 在 rake 任务中,您可以尝试手动映射一些数据:

    # Put this in lib/tasks/import.rb
    require 'csv'
    
    namespace :import do
      desc 'import some data!'
      task :from_csv do
        CSV.foreach('path/to/file.csv') do |row|
          model = YourNewModel.new(field_xyz: row[xyz], ...)
          # ... maybe do some other stuff here if you need to process anything
          model.save if model.valid? # maybe check if it's valid
        end
      end
    end
    

    当然,在这里您必须将模型字段正确映射到 CSV 行。 Check out the 1.9.3 CSV docs here.

    现在像这样运行 rake 任务:

    $ cd /path/to/your/app && rake import:from_csv
    

关于database - Rails 3 - 将大量数据从旧数据库模式移动到新数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549513/

相关文章:

c# - Entity Framework 和不同的环境(开发/生产)

ruby-on-rails - rails : Is that safe to store data in "session"?

Laravel 与自定义表名称和 ID 的多对多关系

python - Django:错误:未知命令: 'makemigrations'

angular - 想要将项目从 Angular v5 升级到 Angular v6

java - 安卓 : SQLite : Find closest value from a table

mysql - 如何获得在数据库表中搜索字符串的正确语法?

PHP - 验证用户是否存在于数据库中并在不重新加载页面的情况下显示结果

ruby-on-rails - Rails with bootstrap-generators gem 在 IE8 中的样式为零,但在 IE9 中却如此

ruby-on-rails - 仅从现有模型/ Controller 生成测试