如何在 Rails 7.0 中使用 Postgresql 的“real”(float4)类型,而不是“双精度”?

How to use Postgresql's "real" (float4) type in Rails 7.0, instead of the "double precision"?

提问人:Slth 提问时间:8/8/2023 最后编辑:Slth 更新时间:8/9/2023 访问量:92

问:

我有一个连接到Postgres数据库的Rails 7.0应用程序。

我有数百万行的表,每行存储 10 多列作为浮点类型。

在 Rails 中存储带有小数的数字的默认方式是 float 类型,它对应于 Postgres 中的 float8 类型(也称为双精度),这意味着作为此类型存储的每个值都是 8 字节的数据。

我可以通过告诉 Rails 来节省大量空间,告诉 Postgres,使用 float4(real)而不是 float8。

基本上将我数据库中最大表的大小减半。

唯一的问题是我真的不知道该怎么做,而且我似乎没有找到任何线索。

有没有人尝试过这样做?

此外,如果是这种情况,我会接受有关迁移本身的任何建议,因为我还需要将现有条目切换到 float4。

最好!

Ruby-on-Rails 数据库 PostgreSQL SQLRataTypes Ruby-on-Rails-7

评论

3赞 nbk 8/8/2023
仅供参考,表格有列和行
0赞 Slth 8/8/2023
是的,编辑了帖子,对不起这个错误
0赞 tadman 8/8/2023
这真的把你的桌子切成两半吗?我会感到惊讶。通常,ID、行标识符、索引和其他数据会使这些节省变得非常微不足道。
0赞 Frank Heikens 8/8/2023
对于 10 列,您可以节省 40 个字节。对于 10 亿条记录,总共为 37GB。当您在这些列上也有索引时,也许会更多。存储很便宜。它仍然是一个浮子,有浮子的所有问题......docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
0赞 Slth 8/9/2023
同意@FrankHeikens。但是这里的用例非常特殊,因为我想将数据库迁移到 DBaaS 服务。由于迁移,应用程序会因停机时间过长而受到很大影响,因此我实际上正在最大限度地优化每个方面,以便迁移过程花费尽可能少的时间。实际上,40gigs的数据已经节省了一些时间。而且我有几张桌子,我可以像这样缩小尺寸!

答:

2赞 Slth 8/8/2023 #1

通过搞砸迁移找到了答案。

就像在浮点类型中添加 4 一样简单,如下所示:

  def change
    add_column :my_table, :my_column, :float4
  end

这会导致在检查psql时出现“real”列。