是否可以將字符串字段更改爲整數而不清除已輸入的數據?Rails將字符串轉換爲整數的遷移?
目前DB結構問題的表是:
create_table :people do |t|
t.string :company_id
這可能使用遷移?
我在想,也許在遷移下降舊領域,創建一個新的整數 - 但我擔心這將清除所有已輸入的數據。
感謝,
丹尼
是否可以將字符串字段更改爲整數而不清除已輸入的數據?Rails將字符串轉換爲整數的遷移?
目前DB結構問題的表是:
create_table :people do |t|
t.string :company_id
這可能使用遷移?
我在想,也許在遷移下降舊領域,創建一個新的整數 - 但我擔心這將清除所有已輸入的數據。
感謝,
丹尼
不要刪除列,它會清除數據。
但是,您可以嘗試
change_column :people, :company_id, :integer
而如果company_id
所有的值可以轉換爲integer
,應該沒事。
如果情況並非如此(即並非所有字符串都可以默認轉換),那麼您可以分兩步進行:1)創建一個新列,然後在某個轉換後加載company_id
。 2)放下company_id然後重命名新列。
你應該小心這兩種方法(對於第二種方法更是如此),如果可以的話,你應該首先在數據庫副本上執行。
不要刪除列,使用此
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
的「暗示」你的PostgreSQL得到基本上告訴你,你需要確認你要做到這一點,以及數據應該如何轉換。要確認更改,在遷移
這應該是公認的答案 – BananaNeil 2018-02-13 23:21:40
其他的答案是正確的使用上面的塊,但你可以採取一步與:using
關鍵字:
change_column :people, :company_id, :integer, using: 'company_id::integer'
感謝提高格式化,jigfox – Zaki 2010-08-21 09:43:14
大,謝謝。我想我不必在第一個例子中說明當前類型? – dannymcc 2010-08-21 09:44:59
當我將代碼推送到Heroku時,第一種方法爲我生成錯誤。 PG :: DatatypeMismatch:ERROR:列「company_id」不能自動轉換爲鍵入整數 提示:指定一個USING表達式來執行轉換。 :ALTER TABLE「協作者」ALTER COLUMN「company_id」類型整數 rake中止! StandardError:發生錯誤,此次及以後的所有遷移取消: PG :: DatatypeMismatch:ERROR:列「company_id」不能自動轉換爲鍵入整數 提示:指定一個USING表達式來執行轉換。 – Evolve 2014-04-15 07:43:25