1

我已经为此奋斗了几天,但我已经停止了任何进展。

我开始在 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,但仍然是空的。

有没有人有任何想法?我完全被难住了。

4

2 回答 2

0

经过相当多的调查后,我发现当我尝试迁移数据时,我更改为“bigint”的列以某种方式被转换回常规整数列。

我发现解决此问题的最简单方法是创建一个“bigint”类型的新列,将信息从 Integer 列复制到“bigint”列,然后删除旧的 Integer 列。

于 2013-10-15T20:02:33.073 回答
-1

在 Ruby on Rails for bigint (Postgre) 中使用decimal而不是integer。喜欢:

  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
于 2013-11-22T15:36:12.297 回答