Postgresql

在 postgres 列中僅儲存 -1 0 和 1 的正確數據類型是什麼?

  • December 7, 2021
  • 我只想在一列中儲存 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 字元!

為了節省空間,您必須考慮對齊。這些值始終根據類型對齊對齊。例如,abigint總是必須從能被 8 整除的地址開始。

現在,如果您的表定義為

CREATE TABLE (
  smallflag "char",
  largenum  bigint
);

列之間將有 7個填充字節,這將使所有空間收益從"char"moot 中獲得。

因此,請小心放置表格列。

引用自:https://dba.stackexchange.com/questions/254532