我最近将应用程序部署到了Heroku,因此必须对其中一个表中的几列进行一些修改。具体来说,我做了以下工作:
class ChangeCancelColumnOrders < ActiveRecord::Migration
def change
change_column :orders, :cancel, 'boolean USING CAST(cancel AS boolean)'
end
end
IE浏览器我添加了'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
列中,但是我不知道如何解决该问题?
如果我理解正确,则说明您正在使用SQLite进行开发,但正在Heroku上部署到Postgres。
这就是问题所在。解决方案是在本地也使用Postgres进行开发。最好与相同的版本。SQL实现之间存在许多差异,一旦您使用除基本DML命令以外的任何其他方法,您就会遇到障碍。
有什么等价SQLite中这样PostgreSQL的DDL命令:
ALTER TABLE orders ALTER cancel TYPE boolean USING CAST(cancel AS boolean);
SQLite的实现ALTER TABLE
非常有限。每个文档:
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。
相关答案:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句