Rails - SQLite3 :: SQLException:near" USING":语法错误

时间:2014-07-28 15:31:59

标签: ruby-on-rails postgresql heroku sqlite

我最近将我的应用程序部署到了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列,但我不知道如何解决这个问题?

1 个答案:

答案 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.

相关答案: