Postgresql
在 postgres 列中僅儲存 -1 0 和 1 的正確數據類型是什麼?
- 我只想在一列中儲存 3 個狀態(如果是 2,我會使用布爾值)
- 我考慮過使用 ENUM(‘up’, ‘down’, ’none’) 但似乎 ENUM 佔用了一些空間
- 有沒有更好的方法在 Postgresql 列中只儲存 -1 0 和 1?
如果要節省空間,可以使用
"char"
數據類型。它儲存一個字節。你可以投
integer
或:text``"char"
SELECT 'u'::"char", 'd'::"char", 'n'::"char"; char | char | char ------+------+------ u | d | n (1 row)
列舉使用 4 個字節,因為它在內部儲存為
real
.您不應該使用
"char"
非 ASCII 字元!為了節省空間,您必須考慮對齊。這些值始終根據類型對齊對齊。例如,a
bigint
總是必須從能被 8 整除的地址開始。現在,如果您的表定義為
CREATE TABLE ( smallflag "char", largenum bigint );
列之間將有 7個填充字節,這將使所有空間收益從
"char"
moot 中獲得。因此,請小心放置表格列。