设置
我们有一些表具有非常高的 id
值,因此它们在生产中是 bigints
,这是通过运行迁移更改 id 列来实现的,包括 限制:8
。此方法概述如下:https://stackoverflow.com/a/5870148/2240218
这些迁移不会修改 db/schema.rb
,所以当我们运行 rake db:test:prepare
时,测试数据库是用正常的 4 字节创建的具有 maximum of 2.1 billion 的整数列(为了它的值(value),我们正在使用 Postgres)。
关于我们 id 的注释
由于遗留原因,它们被绑定(bind)为来自第三方系统的外键。理想情况下,我们会使用 id
列作为内部代理主键,而第三方键将完全是一个单独的列(这将消除整个问题),但此更改的开销超出了我现在正在努力。
问题
我正在尝试对真实世界的数据进行一些集成测试,其中一些的 id
大于 21 亿。我们将在运行测试时对这些外部系统进行一些调用(我们最终将使用 VCR stub ),因此它们需要是正确的。但是,当我尝试使用此数据时,它爆炸了,因为该值对于测试数据库中的列来说太大了。
所以我的问题是:是否有任何非大规模 hacky 方法来确保这些 id
列在测试数据库中是 bigints
运行 db:test:prepare
?
最佳答案
将模式格式从 :ruby
更改为 :sql
以便您的模式转储是纯 SQL。这应该使那些大整数保持完整(以及您可能拥有的任何存储过程等)。
在 config/application.rb 中:
config.active_record.schema_format = :sql
http://guides.rubyonrails.org/active_record_migrations.html#types-of-schema-dumps
关于ruby-on-rails - 是否可以在 Rails 应用程序中使用长 id 并将其持久保存到测试数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614316/