【发布时间】:2015-09-16 16:47:33
【问题描述】:
设置
我们有一些表具有非常高的id 值,因此它们在生产中是bigints,这是通过运行迁移更改包括limit: 8 在内的id 列来实现的。此处概述了此方法:https://stackoverflow.com/a/5870148/2240218
那些迁移不会修改db/schema.rb,所以当我们运行rake db:test:prepare 时,测试数据库是使用具有maximum of 2.1 billion 的普通4 字节整数列创建的(为了它的价值,我们使用的是Postgres) .
关于我们的 ID 的说明
由于遗留原因,它们被绑定为来自第三方系统的外键。理想情况下,我们将使用 id 列作为内部代理主键,而第三方键将完全是一个单独的列(这将消除整个问题),但这种更改的开销超出了我的尝试马上到达。
问题
我正在尝试使用真实世界的数据进行一些集成测试,其中一些的id 大于 21 亿。在运行测试(我们最终将使用 VCR 存根)时,我们将对这些外部系统进行一些调用,因此它们需要是正确的。但是,当我尝试使用这些数据时,它会崩溃,因为该值对于测试数据库中的列来说太大了。
所以我的问题是:在运行db:test:prepare 之后,是否有任何非大规模破解方法来确保这些id 列在测试数据库中为bigints?
【问题讨论】:
-
从 schema.rb 切换到 structure.sql 会修复它吗?
-
谢谢@PhilipHallstrom - 是的,看起来它可以正常工作!我以前没有遇到过structures.sql,你能把它作为一个例子作为答案,我会接受吗?
标签: ruby-on-rails database postgresql