gpt4 book ai didi

ruby-on-rails - 如何更改 Heroku 中的列类型?

转载 作者:数据小太阳 更新时间:2023-10-29 06:30:07 24 4
gpt4 key购买 nike

我正在尝试将 db:migrations 放入我的 heorku 实例中,但出现错误。常见问题解答如下描述了我的错误:

Cannot change column type

Example: PGError: ERROR: column “verified_at” cannot be cast to type “date”

Cause: PostgreSQL doesn’t know how to cast all the rows in that table to the specified type. Most likely it means you have an integer or a string in that column.

Solution: Inspect your records and make sure they can be converted to the new type. Sometimes it’s easier to just avoid using change_column, renaming/creating a new column instead.

我现在如何更改此迁移。这是我遇到的问题。对于我的联系人表,我创建了以下内容:

  t.string :date_entered

在以后的迁移中,我执行以下操作:

 change_column :contacts, :date_entered, :date

这个 change_column 似乎是问题所在。

我应该...手动更改迁移吗?有没有一种方法可以清理我的表中的数据(我不知道 Heroku 会识别表中的数据,因为我正在做 rake)。

我显然需要更改此值,并且它会在我的整个应用程序中使用。谢谢。

这就是我正在尝试的……想法?

def self.up
#change_column :contacts, :date_entered, :date
#this fails in postgres, so trying the same outcome

rename_column :contacts, :date_entered, :date_entered_old
add_column :contacts, :date_entered, :date
remove_column :contacts, :date_entered_old
end

def self.down
add_column :contacts, :date_entered_old
remove_column :contacts, :date_entered
rename_column :contacts, :date_entered_old, :date_entered
end

最佳答案

执行以下操作:

  1. 重命名 A 列
  2. 创建新列 B 作为日期
  3. 将数据从A移动到B
  4. 删除A

换句话说

def self.up
rename_column :contacts, :date_entered, :date_entered_string
add_column :contacts, :date_entered, :date

Contact.reset_column_information
Contact.find_each { |c| c.update_attribute(:date_entered, c.date_entered_string) }
remove_column :contacts, :date_entered_string
end

关于ruby-on-rails - 如何更改 Heroku 中的列类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com