2016-06-24 12 views
0

私の開発でクライアントテーブルの列の型を整数から日付に変更するために移行を作成しました。HerokuでRails Migrationを実行する問題

移行:

開発にうまく働いた
class UpdateGradToDate < ActiveRecord::Migration 
    def change 
    change_column :clients, :grad_id, :date 
    end 
end 

。しかし、一度Herokuにプッシュすると、次のエラーメッセージが表示されます。

PG::DatatypeMismatch: ERROR: column "grad_id" cannot be cast automatically to type date 
HINT: You might need to specify "USING grad_id::date". 
: ALTER TABLE "clients" ALTER COLUMN "grad_id" TYPE date 

この問題を解決する方法がわかりません。私はおそらくレールのコンソールを使用して、そこに列の種類を変更すると思っているが、私はそれが最高の解決策であるかどうかはわからない。

はまた、私はこの時点で何をすべきか本当にわからないだけでなく

class ChangeDateFormatInMyTable < ActiveRecord::Migration 
    def up 
    change_column :clients, :grad_id, :integer 
    end 

    def down 
    change_column :clients, :grad_id, :date 
    end 
end 

次の構文を使用して、使用して新しい移行を作成してみました。ここ

+0

「grad_id」はどのように日付になる可能性がありますか?なぜ、日付として理にかなった新しい列を追加するだけではないのですか? –

答えて

2

問題が明確にPostgreSQLのエラーによって説明される:

column "grad_id" cannot be cast automatically to type date

あなたは日に、整数を格納するフィールドを変換しようとしています。フィールドには、10、0、-200などの値を含めることができます。その価値をどのようにして日付に変換することができましたか?

PostgreSQLでは変換を手助けする必要があることを伝えています。

あなたの最善の方法は次のとおりです。

  1. grad_id_legacyからそれぞれの値を読み取り、対応を保存するスクリプトを実行
  2. 新しいgrad_id日付フィールドを作成し、grad_idに日付値を変換grad_id
  3. grad_id_legacyに名前を変更します
+0

ダウンタイムを最小限に抑えるために、 'grad_id_date'を作成してから' grad_id'に名前を変更するなど、手順の順序を逆にすることをお勧めします。また、未処理のSQL ALTER TABLE文をUSING節とともに使用して、Postgresに変換の仕方を伝えることもできますが、その処理の間はテーブルをロックします。 –

関連する問題