【问题标题】:Cast old string values to datetime with migration in Rails PostgreSQL通过 Rails PostgreSQL 中的迁移将旧字符串值转换为日期时间
【发布时间】:2016-08-27 03:29:13
【问题描述】:

我在数据库表中有几个日期字段,但是它们首先以字符串而不是日期时间的形式启动。因此,我想通过迁移将这些值类型更改为 datetype,

class ChangeDateColumnsToDateTime < ActiveRecord::Migration
  def change
    change_column :users, :flight_date_departure, :datetime
    change_column :users, :flight_date, :datetime
    change_column :users, :appointment_date, :datetime
  end
end

但是它不能将旧字符串值转换为当前存在于数据库中的日期时间,也就是说 PG::DatatypeMismatch: 错误:列“flight_date_departure”不能自动转换为没有时区的类型时间戳。提示:您可能需要指定“USING flight_date_departure::timestamp without time zone”。我们已经在 SQLite 数据库中完成了它,但 PostgreSQL 存在这个问题。如何修改我的迁移,以免丢失旧值并将它们正确转换为日期时间?

【问题讨论】:

  • 解决方法: 添加新的datatime 列,写一个rake task 将字符串值复制到数据时间列(可能您需要使用to_datetime 将字符串转换为日期时间),删除旧字符串列,您可能需要将日期时间列重命名为 flight_date_departure

标签: ruby-on-rails postgresql datetime


【解决方案1】:

我试过下面的方法,效果很好:

change_column :table_name, :column_name, 'timestamp USING CAST(column_name AS timestamp)'

【讨论】:

  • 这对我在 Rails 5.2 上的 postgres 有效,谢谢!
【解决方案2】:

试试这样:

change_column :table_name, :column_name, 'datetime USING CAST(column_name AS datetime)'

【讨论】:

  • 对我不起作用ActiveRecord::StatementInvalid: PG::UndefinedObject: ERROR: type "datetime" does not exist
  • Postgres 没有datetime 数据类型,但有timestampdate。见docs
【解决方案3】:

这是我的工作代码

class AddSrCreateDateToCart < ActiveRecord::Migration[5.2]
  def change
    add_column :carts, :sr_create_date, :datetime
    change_column :carts, :sr_create_date, 'datetime USING CAST(sr_create_date AS timestamp)'
  end
end

postgres 正在下载数据

【讨论】:

    【解决方案4】:

    最好将其设为可逆迁移。

    def up
      change_column :table_name, :column_name, 'timestamp USING CAST(column_name AS timestamp)'
    end
    
    def down
      change_column :table_name, :column_name, 'date USING CAST(column_name AS date)'
    end
    

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2011-01-24
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      相关资源
      最近更新 更多