我们有一些表具有非常高的id
值,因此它们在生产中为bigints
,这是通过运行迁移来更改包含limit: 8
的id列来实现的。此处概述了此方法:https://stackoverflow.com/a/5870148/2240218
这些迁移不会修改db/schema.rb
,因此当我们运行rake db:test:prepare
时,将使用正常的4字节整数列创建测试数据库,该列具有maximum of 2.1 billion(对于它的价值而言) ,我们正在使用Postgres。)
由于遗留原因,它们与来自第三方系统的外键有关。理想情况下,我们将使用id
列作为内部代理主键,第三方密钥将完全是一个单独的列(这将消除整个问题),但此更改的开销超出了我的范围。试图进入目前。
我正在尝试使用真实数据进行一些集成测试,其中一些测试的id
大于21亿。在运行测试时我们将对这些外部系统进行一些调用(我们最终将使用VCR进行存根),因此它们需要正确。但是,当我尝试使用这些数据时,它会爆炸,因为测试数据库中的列太大了。
所以我的问题是:在运行id
之后,是否有任何非大规模的方法可以确保测试数据库中的这些bigints
列为db:test:prepare
?
答案 0 :(得分:1)
将架构格式从:ruby
更改为:sql
,以便您的架构转储是纯SQL。这应该保持那些大整数(以及你可能拥有的任何存储过程等)。
在config / application.rb中:
config.active_record.schema_format = :sql
http://guides.rubyonrails.org/active_record_migrations.html#types-of-schema-dumps