我是ruby on rails,github和heroku的新手。现在我在该项目中进行定期存款项目我在我的localhost 中使用数据库 sqlite3,在heroku中使用 postgres 。
我添加了一个名为 int 的字段,其数据类型为字符串,我将数据类型从字符串更改为整数。最后,我决定再次从整数更改为 float 。 在我当地的主机上工作完美。但是,当我试图在heroku中运行时,显示rake已中止。
heroku运行rake db:migrate
它显示以下错误消息
Running `rake db:migrate` attached to terminal... up, run.4356
Connecting to database specified by DATABASE_URL
Migrating to CreateFds (20140505120047)
Migrating to Changedatatypeforfd (20140506065307)
Migrating to AddMdToFds (20140506080333)
Migrating to AddIntToFds (20140506080404)
Migrating to Changedatatypeforint (20140506103001)
== Changedatatypeforint: migrating ======================
-- change_column(:fds, :int, :integer)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PGError: ERROR: column "int" cannot be cast automatically to type integer
HINT: Specify a USING expression to perform the conversion.
: ALTER TABLE "fds" ALTER COLUMN "int" TYPE integer
我的db文件列在下面
20140506080404_add_int_to_fds.rb
class AddIntToFds < ActiveRecord::Migration
def change
add_column :fds, :int, :string
end
end
20140506103001_changedatatypeforint.rb
class Changedatatypeforint < ActiveRecord::Migration
def up
change_column :fds, :int, :integer
end
def down
change_column :fds, :int, :string
end
end
20140508105541_rechangedatatypeforint.rb
class Rechangedatatypeforint < ActiveRecord::Migration
def up
change_column :fds, :int, :float
end
def down
change_column :fds, :int, :integer
end
end
对不起我的错误。 请给我解决方案。 提前谢谢。
答案 0 :(得分:0)
Heroku使用PostgreSQL。在PostgreSQL中int是一个保留字,你不能将它用作列名。
为int
名称
change_column :fds, :valid_name, :integer
如果你想从float转换为整数,一种方法是:
class MigrationNameHere < ActiveRecord::Migration
def up
execute('ALTER TABLE fds ALTER COLUMN column_name TYPE integer USING round(column_name);')
end
end
此迁移会将您的所有浮点数转换为整数,并且不可逆所以要小心。我建议你在做这个之前做个备份。