【问题标题】:change_column migration issues with RailsRails 的 change_column 迁移问题
【发布时间】:2020-06-21 18:21:42
【问题描述】:

我将 PostGres 和 Rails 6 用于 Docker 项目。我有以下迁移文件,用于将列类型从字符串或数字转换为整数:

class ChangeColumnTypes < ActiveRecord::Migration[6.0]
  def change
    change_column :drivers, :yearOfBirth, :integer, using: 'yearOfBirth::integer'
    change_column :drivers, :racingNumber, :integer, using: 'racingNumber::integer'
    change_column :drivers, :noRaces, :integer, using: 'noRaces::integer'
    change_column :drivers, :noPoles, :integer, using: 'noPoles::integer'
    change_column :drivers, :noPodiums, :integer, using: 'noPodiums::integer'
    change_column :drivers, :noWins, :integer, using: 'noWins::integer'
    change_column :drivers, :user_id, :integer, using: 'user_id::integer'
  end
end

当我运行迁移时,我会收到类似的错误

Caused by:
myapp_1     | PG::UndefinedColumn: ERROR:  column drivers.yearofbirth does not exist
myapp_1     | LINE 1: ...rivers" ALTER COLUMN "drivers" TYPE integer USING drivers.ye...

HINT:  Perhaps you meant to reference the column "drivers.yearOfBirth".

我的专栏是驼峰式的,这可能是问题,因为 yearOfBirth 名称是正确的。有没有办法解决?谢谢

【问题讨论】:

    标签: postgresql ruby-on-rails-6


    【解决方案1】:

    你可以试试

    change_column :drivers, :yearOfBirth, 'integer USING CAST(yearOfBirth AS integer)'
    

    如果这不起作用(为了安全起见,我会在尝试之前将其全部备份):

    1. 使用另一个名称创建一个新的 int 列
    2. 将转换后的数据移到那里
    3. 删除原始列
    4. 将新列名称更改为原始名称
    create_column :drivers, :yearOfBirthInt, :integer
    
    Driver.update_all('yearOfBirthInt = CAST(yearOfBirth AS integer)')
    
    # If the above doesn't work, try this, but it's a lot slower:
    # Driver.transaction do
    #   Driver.each { |d| d.update!(yearOfBirthInt: d.yearOfBirth.to_i) }
    # end
    
    remove_column :drivers, :yearOfBirth
    rename_column :drivers, :yearOfBirthInt, :yearOfBirth
    

    【讨论】:

    • 啊,是的,谢谢。当我将代码放在 Stack Overflow 上时,这是一个错字。错误是一样的。
    猜你喜欢
    • 2018-10-31
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2015-08-30
    • 2016-10-13
    相关资源
    最近更新 更多