我最近将我的应用程序部署到了Heroku,并且这样做我不得不对我的一个表中的几列进行修改。具体来说,我做了以下事情:
class ChangeCancelColumnOrders < ActiveRecord::Migration
def change
change_column :orders, :cancel, 'boolean USING CAST(cancel AS boolean)'
end
end
即。我添加了'boolean USING CAST(cancel AS boolean)'
部分,因为在尝试执行heroku run rake db:migrate
时出现了此错误:
PG::DatatypeMismatch: ERROR: column "cancel" cannot be cast automatically to type boolean
这已经修复,Heroku上的一切正常。
现在的问题是,当我尝试在本地运行rake db:migrate
时,我收到以下错误:
SQLite3::SQLException: near "USING": syntax error:
CREATE TABLE "orders" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime, "updated_at" datetime, "first_name" varchar(255), "last_name" varchar(255), "email" varchar(255), "address_1" varchar(255), "address_2" varchar(255), "city" varchar(255), "postal_code" varchar(255), "country_code" varchar(255), "shipped_date" date, "total_price" integer, "shipped" boolean DEFAULT 'f', "cancel" boolean USING CAST(cancel AS boolean) DEFAULT 'f', "cancel_date" date)
我可以看到已将boolean USING CAST(cancel AS boolean)
添加到cancel
列,但我不知道如何解决这个问题?
答案 0 :(得分:1)
如果我说得对,你正在使用 SQLite 开发,但是在Heroku上部署到 Postgres 。
此 问题。解决方案是在本地与Postgres一起开发。最好的相同版本。 SQL实现中存在许多差异,只要您使用除基本DML命令之外的任何其他内容,就会遇到障碍。
在SQLite中有 nothing 等效,就像这个PostgreSQL DDL命令一样:
ALTER TABLE orders ALTER cancel TYPE boolean USING CAST(cancel AS boolean);
ALTER TABLE
的SQLite实现非常有限。 Per documentation:
SQLite支持ALTER TABLE的有限子集。 ALTER TABLE SQLite中的命令允许用户重命名表或添加新表 列到现有表。
对于表架构的所有其他更改,都有recipe in the SQLite manual.
相关答案: