我試圖保存一個代表文件長度的數字(4825733517)。該列設置爲整型。我沒有任何驗證或限制設置。PostgreSQL數據庫中的整數超出範圍
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
我應該使用該值的其他列類型? (上軌4.2.4)
我試圖保存一個代表文件長度的數字(4825733517)。該列設置爲整型。我沒有任何驗證或限制設置。PostgreSQL數據庫中的整數超出範圍
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
我應該使用該值的其他列類型? (上軌4.2.4)
對於integer
類型的列中,:limit
值是以字節爲單位的最大列長度(documentation)。
使用4字節長度,您可以存儲的最大有符號整數是2,147,483,647,比您的值4,825,733,517小。您可以增加字節限制,例如將8個字節設置爲長整數(一個bigint PostgreSQL type),這將允許您將有符號值存儲爲9,223,372,036,854,775,807。
您可以使用遷移做到這一點的東西,如rails generate migration change_integer_limit_in_your_table
創建它,下面的代碼:
class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
def change
change_column :your_table, :your_column, :integer, limit: 8
end
end
根據the PostgreSQL documentation,整數的範圍是從-2147483648到+2147483647。所以你的電話號碼對於這種類型很重要。
更新您的列並使用參數限制來指示您想擁有bigint
。
change_column :table, :column, :integer, limit: 8
僅供參考,這是一個很好的答案,*幾乎*爲我工作。 **工作的**都是相同的語法,但是'change_column'而不是'update_column'。我正在使用Rails 4.2.6,所以也許不贊成使用「update_column」。 –
你是絕對正確的 - 'update_column'只是不正確的,當第一次寫這個時,我可能會從其他答案中得到一個錯誤的提示。編輯帖子,謝謝指出 – p4sh4