我已经和我斗争了几天了,我已经停止了取得任何进展。
我开始为我的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,而且它仍然是空的。
有没有人有任何想法?我完全难过了。
答案 0 :(得分:0)
经过大量调查后,我发现当我尝试迁移数据时,我更改为“bigint”的列以某种方式被转换回常规整数列。
我发现修复此问题的最简单方法是创建一个“bigint”类型的新列,将Integer列中的信息复制到“bigint”列中,然后删除旧的Integer列。
答案 1 :(得分:-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