加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 可以在Postgres中存储1个字节的数字吗?

发布时间:2020-12-13 16:28:31 所属栏目:百科 来源:网络整理
导读:我有7个8位整数值,我想要存储在Postgres中. Pg不提供单字节整数类型SMALLINT或2个字节,它是最小的整型数据类型.有没有办法我可以存储我的7 8位数字并节省空间? 具有7元素数组的数组类型是否更紧凑?或者,我应该使用我的7个数字的二进制表示法(例如,在Perl中
我有7个8位整数值,我想要存储在Postgres中. Pg不提供单字节整数类型SMALLINT或2个字节,它是最小的整型数据类型.有没有办法我可以存储我的7 8位数字并节省空间?

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

任何其他建议?

假设PostgreSQL中任何行的开销为 23 bytes(HeapTupleHeaderData),如果您真的关心少量的空间,那么您可能选择了错误的方式来存储数据.

无论如何,由于所有更复杂的类型都有自己的开销(bytea增加了四个字节的开销,例如位串5到8),完成所需内容的唯一方法是使用bigint(8字节)以数值方式移动每个值并将结果进行OR运算.您可以使用bit string operations使代码更容易 – 以位字符串计算,然后在存储之前转换为bigint – 或者如果要使速度更好,则只需手动乘法/加法.例如,以下是将两个字节一起存储为两个字节的结构,然后再重新得到它们:

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

您可以将相同的想法扩展到存储其中的7个方法.检索开销仍然是可怕的,但您实际上会在此过程中节省一些空间.但是相对于行标题来说不是很多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读