我有一长串来自0 to 10 million
. 我想将这些数字中的每一个标记为true/false or set/unset
。我想避免为每个数字创建一个包含一行的表,例如
CREATE TABLE foo (number integer, set boolean)
相反,我在想我可以做一些按位计算来存储和检索单个单元格中的这些数据。我可以在这里使用Bit(N)
数据类型吗?
CREATE TABLE some_table (my_store BIT(1000000)) // 1 million
我应该如何在特定位置设置/取消设置/检索位值?
编辑
我发现这BIT(10000000)
给出了一个错误 is out of range for type integer
。
bit
和type都bit varying
可以存储 1000 万位的位掩码(上限好像是 83886080)。但是为了能够在那里设置/获取位,您需要预先初始化该值。set_bit()
不会自动增加位串的大小(如果使用bit varying
),并且get_bit()
在尝试访问超出当前值长度的位时会抛出错误。这将创建一个具有 1000 万位(全部设置为零)的位串。
请注意,位的编号从 开始
0
,而不是 1。因此,要测试“最后一个值”,您需要:要更改值,请使用
set_bit()
设置数字 10000 的位如果需要,您可以将逻辑包装到函数中。
在线示例
从理论上讲,您可以使用 a
bit varying
来支持未知范围的数字,您只需要有一些逻辑来扩展当前值以包含新的位位置,例如通过在新位和现有位之间附加适当数量的位到 "填补空缺”。