ruby-on-rails - 是否可以在 Rails 应用程序中使用长 id 并将其持久保存到测试数据库?

标签 ruby-on-rails database postgresql

设置

我们有一些表具有非常高的 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/

相关文章:

c++ - 使用大数据集加速 postgresql 查询

sql - 根据两个多对多关系选择行

ruby-on-rails - Rails has_many :through with namespace - uninitialized constant

ruby-on-rails - 如何覆盖 gem Controller 操作 Ruby on Rails?

mysql - 检查一列是否为空

mysql - 有没有办法在不同主机上测试您的 MYSQL 数据库速度?

postgresql - 无法通过 pgAdmin 连接到 Docker 容器上的 Postgres

ruby-on-rails - ruby 正则表达式 - 如何匹配所有内容直到字符 -

ruby-on-rails - 我怎样才能更好地执行我的代码?

php - 注册表格的电子邮件激活