Eva*_*oll 6 postgresql datatypes
smallint类型和bool存储布尔值的类型有什么区别?
这个问题出现在对地理信息系统堆栈交换问题的评论中。
Erw*_*ter 17
始终将布尔数据存储为boolean. 只有异国情调的例外可以想象。除了您作为答案发布的内容之外,
只是为了解决存储角度:
boolean在磁盘上需要1个字节,smallint需要2 个。但这还不是全部。
smallint(像其他整数类型和不同boolean)也有对齐填充的特殊需求。它只能从元组数据开始的偶数偏移处开始。因此,每个奇数时间(字面意思)都会消耗另一个字节。
在最坏的情况下,当与需要 8 字节对齐的类型混合时,例如bigintor timestamp/ timestamptz:
SELECT pg_column_size(row("char" 'a', FALSE )) AS char_bool
, pg_column_size(row("char" 'a', int2 '1')) AS char_int2
, pg_column_size(row(text 'abcdef', TRUE , now())) AS text7_bool_ts
, pg_column_size(row(text 'abcdef', int2 '1', now())) AS text7_int2_ts; -- worst case
Run Code Online (Sandbox Code Playgroud)
SELECT pg_column_size(row("char" 'a', FALSE )) AS char_bool
, pg_column_size(row("char" 'a', int2 '1')) AS char_int2
, pg_column_size(row(text 'abcdef', TRUE , now())) AS text7_bool_ts
, pg_column_size(row(text 'abcdef', int2 '1', now())) AS text7_int2_ts; -- worst case
Run Code Online (Sandbox Code Playgroud)
细节:
如果您有很多 boolean NOT NULL值并且想要优化磁盘空间:
| 归档时间: |
|
| 查看次数: |
8655 次 |
| 最近记录: |