【问题标题】:Rails - SQLite3::SQLException: near "USING": syntax errorRails - SQLite3::SQLException:在“USING”附近:语法错误
【发布时间】:2014-09-19 20:20:38
【问题描述】:

我最近将我的应用程序部署到 Heroku,因此我必须对其中一张表中的几列进行一些修改。具体来说,我做了以下事情:

class ChangeCancelColumnOrders < ActiveRecord::Migration
  def change
    change_column :orders, :cancel, 'boolean USING CAST(cancel AS boolean)'
  end
end

I.E.我添加了'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 列,但我不知道如何解决这个问题?

【问题讨论】:

  • 这是您希望开发和生产数据库具有相同风格的完美示例。既然你不能改变heroku使用PG的事实,那么你也应该把你的开发数据库改为PG。
  • @james 你最终做了什么来解决这个问题?我也有同样的问题。

标签: ruby-on-rails postgresql heroku sqlite


【解决方案1】:

如果我没记错的话,您正在使用 SQLite 进行开发,但部署到 Heroku 上的 Postgres

的问题。解决方案是在本地也使用 Postgres 进行开发。最好用同一个版本。 SQL 实现有很多不同,只要您使用基本 DML 命令以外的任何东西,您就会不断遇到障碍。

在 SQLite 中没有类似 PostgreSQL DDL 命令的 nothing 等价物:

ALTER TABLE orders ALTER cancel TYPE boolean USING CAST(cancel AS boolean);

ALTER TABLE 的 SQLite 实现非常有限。 Per documentation:

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

对于表架构的所有其他更改,有一个recipe in the SQLite manual.

相关答案:

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多