gpt4 book ai didi

postgresql - 是否可以在 Postgres 中存储一个 1 字节的数字?

转载 作者:行者123 更新时间:2023-11-29 11:09:13 24 4
gpt4 key购买 nike

我想在 Postgres 中存储每条记录的 7 个 8 位整数值。 Pg 不提供单字节整数类型、SMALLINT 或 2 字节,这是最小的整数数据类型。无论如何我可以存储我的 7 个 8 位数字并节省空间吗?

具有 7 个元素数组的数组类型会更紧凑吗?或者,我应该对我的 7 个数字进行二进制表示(例如,在 Perl 中使用 pack)并将其存储在单个 bytea 字段中吗?

还有什么建议吗?

最佳答案

鉴于 PostgreSQL 中任何行的开销是 23 bytes (HeapTupleHeaderData),如果您真的如此在意少量空间,那么您可能选择了错误的数据存储方式。

无论如何,由于所有更复杂的类型都有自己的开销(bytea 增加了四个字节的开销,例如,位串 5 到 8),完成您正在寻找的唯一方法是使用 bigint (8字节),对每个值进行数字移位并将结果组合在一起。您可以使用 bit string operations 执行此操作使代码更简单——计算为位字符串,然后在存储之前转换为 bigint——或者如果你希望速度更好,则只需手动乘法/加法。例如,下面是如何将两个字节一起存储到一个双字节结构中,然后再将它们取回:

int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256

您可以将相同的想法扩展为以这种方式存储其中的 7 个。检索开销仍然很糟糕,但您实际上已经在这个过程中节省了一些空间。但与行标题的关系不大。

关于postgresql - 是否可以在 Postgres 中存储一个 1 字节的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com