2013-10-05 31 views
1

我一直在爲此奮鬥了幾天,我已經停止了任何進展。移動Rails應用程序到PostgreSQL - 整數超出範圍

我開始在Rails 4/Ruby 2.0應用程序的開發中運行PostgreSQL。其中很大一部分是將我的數據從Sqlite遷移到PostgreSQL。我有一個非常重要的數據應用程序。

我下面的Railscast的說明: http://railscasts.com/episodes/342-migrating-to-postgresql

我的PostgreSQL和運行是正確。

我也遇到一些問題,遷移數據,發現這片在Github上: https://github.com/ricardochimal/taps/issues/128

我接着hak8or這讓我創建一個名爲「TMP」的單獨流線型的應用程序將數據遷移提供的說明。一切似乎都很順利。數據庫模式已轉換,表格開始被複制。

然後我收到此錯誤:

postgres.rb:175:in `exec': PG::NumericValueOutOfRange: ERROR: integer out of range (Sequel::DatabaseError) 

我做了一些看我的數據,並意識到我需要一個欄更改爲一個BIGINT。所以我創建並運行了遷移並重新啓動了數據遷移。可悲的是,我仍然有同樣的錯誤。

轉換似乎按照創建表的順序進行。我檢查了應該轉換的下一個表格,並且只有兩個整數字段。一個是ID,另一個是關係的ID,而且這個ID仍然是空的。

有沒有人有任何想法?我完全被難住了。

+1

是有問題的列中的'integer'或'bigint'?導致問題的價值是什麼? –

+0

當我第一次看到這個錯誤時,我將違規列更改爲bigint,並能夠通過該表。現在我得到了同樣的錯誤,並且數據沒有任何遠程接近整數值2147483647的最大值的值。 –

回答

0

經過相當多的調查後,我發現當我嘗試遷移數據時,我更改爲「bigint」的列以某種方式被轉換回常規整數列。

我發現解決這個問題的最簡單方法是創建一個類型爲「bigint」的新列,將整數列中的信息複製到「bigint」列中,然後刪除舊的Integer列。

-1

在Ruby on Rails for bigint(Postgre)中使用十進制代替代替整數。 像:

def change 
    create_table :profiles do |t| 
     t.decimal :mybigfieldnumber 
     t.timestamps 
    end 
    end 

相反的:

def change 
    create_table :profiles do |t| 
     t.integer :mybigfieldnumber 
     t.timestamps 
    end 
    end