如何解决Rails 6.0 迁移文件是否根据 Postgres 首选项转换为整数?
这里是初学者,部署到 Heroku。开发中的 sqlite3,生产中的 PG。
此时测试环境已成功运行所有迁移。
我正在尝试部署到 Heroku。 git 工作正常。但是当我运行 heroku run rails db:migrate
时出现以下错误
== 20210116010525 ChangeMediaLinksRefToInteger: migrating =====================
-- change_column(:media_links,:media_category_id,:integer)
D,[2021-01-16T19:33:04.056111 #4] DEBUG -- : (1.4ms) BEGIN
D,[2021-01-16T19:33:04.060684 #4] DEBUG -- : (4.1ms) ALTER TABLE "media_links" ALTER COLUMN "media_category_id" TYPE integer
D,[2021-01-16T19:33:04.066364 #4] DEBUG -- : (5.0ms) ROLLBACK
D,[2021-01-16T19:33:04.072867 #4] DEBUG -- : (6.0ms) SELECT pg_advisory_unlock(4856957400867515370)
rails aborted!
StandardError: An error has occurred,this and all later migrations canceled:
PG::DatatypeMismatch: ERROR: column "media_category_id" cannot be cast automatically to type integer
HINT: You might need to specify "USING media_category_id::integer".
注意:这次迁移是我自己在之前不小心将“media_category_id”设置为字符串时的错误更正。我创建了此迁移以将列从字符串更改为整数。迁移文件:
class ChangeMediaLinksRefToInteger < ActiveRecord::Migration[6.0]
def change
change_column :media_links,:integer
end
end
可以更新这个迁移文件还是我应该创建一个新的? 这是 Heroku 告诉我要做的吗?
class ChangeMediaLinksRefToInteger < ActiveRecord::Migration[6.0]
def change
change_column :media_links,"USING media_category_id::integer"
end
end
解决方法
由于迁移失败,您可以将迁移编辑为 Heroku 推荐的内容。
如果迁移已成功运行并且您想对其进行编辑,则可以回滚迁移 ./bin/rails db:rollback
,然后编辑文件,然后再次运行迁移。
如果您想更改已部署到通用测试环境或 PreProd/Prod 的迁移,那么最好创建一个新迁移以在顶部应用更改。
这对我有用:
change_column :orders,:pay_type,"integer USING NULLIF(pay_type,'')::int"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。