繁体   English   中英

Rails - SQLite3::SQLException:在“USING”附近:语法错误

[英]Rails - SQLite3::SQLException: near “USING”: syntax error

我最近将我的应用程序部署到 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);

ALTER TABLE的 SQLite 实现非常有限。 根据文档:

SQLite 支持有限的 ALTER TABLE 子集。 SQLite 中的 ALTER TABLE 命令允许用户重命名表或向现有表添加新列。

对于表模式的所有其他更改, SQLite 手册中有一个配方。

相关回答:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM