gpt4 book ai didi

ruby-on-rails - 为什么我的数据库迁移不起作用,我该如何解决?

转载 作者:行者123 更新时间:2023-11-29 12:06:16 24 4
gpt4 key购买 nike

大家。我正在尝试在 Heroku 上为我的数据库 (postgre) 运行迁移,当我运行它时,出现以下错误:

PGError:错误:列“morning_meds”无法转换为类型“pg_catalog.bool”: ALTER TABLE "users"ALTER COLUMN "morning_meds"TYPE boolean

有问题的迁移文件具有以下代码:

class ChangeUserMedsFieldsToBoolean < ActiveRecord::Migration
def down
change_column :users, :morning_meds, :string
change_column :users, :lunch_meds, :string
change_column :users, :night_meds, :string
end

def up
change_column :users, :morning_meds, :boolean
change_column :users, :lunch_meds, :boolean
change_column :users, :night_meds, :boolean
end
end

我不确定如何修复错误或可能导致错误的原因,所以如果你能给我任何帮助,那将是非常好的!

最佳答案

Rails 似乎不支持指定转换或转换函数,而 PostgreSQL 需要在不存在该类型对的隐式转换的情况下进行数据类型更改。

您需要让 Rails 执行:

ALTER TABLE users ALTER COLUMN col_name SET DATA TYPE morning_meds USING bool(col_name)

并且由于 Rails 显然不允许您通过迁移指定 USING 子句,因此您需要手动执行。参见 this excellent answer .

或者,您可以在迁移前运行:

CREATE FUNCTION bool(text) RETURNS BOOLEAN AS $$
SELECT bool($1);
$$ LANGUAGE 'sql';

CREATE CAST (text AS boolean) WITH FUNCTION bool(text) AS IMPLICIT;

这将允许 ALTER 在没有显式 USING 子句的情况下继续进行。您可以并且可能应该在迁移后删除 cast 和 bool(text) 函数:

DROP CAST (text AS boolean);
DROP FUNCTION bool(text);

关于ruby-on-rails - 为什么我的数据库迁移不起作用,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979565/

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