簡體   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