Postgresql

如何在 PostgreSQL 中儲存一字節整數?

  • November 24, 2021

在 PostgreSQL 文件中,據說整數數據類型可以儲存在 2、4 或 8 字節空間中。我的數據庫中表的一列包含一個單字節整數值,我希望它以單字節數據類型儲存。

  1. 在 PostgreSQL 中是否有使用單字節整數數據類型的擴展或方法?
  2. NUMERIC(1,0) 是多少字節?

,Postgres 的標準發行版中沒有 1 字節整數。標準 Postgres 的所有內置數字類型都佔用 2 個或更多字節。

擴展 pguint

但是,的,有擴展pguint,由 Postgres 核心開發人員之一 Peter Eisentraut 維護。它不是標準分佈的一部分:

除了各種無符號整數類型外,它還提供了您要查找的 1 字節整數:

int1 (signed 8-bit integer)
uint1 (unsigned 8-bit integer)
uint2 (unsigned 16-bit integer)
uint4 (unsigned 32-bit integer)
uint8 (unsigned 64-bit integer)

請務必閱讀連結站點上的“討論”一章,解釋可能的並發症。在引入更多整數類型時,您需要小心類型轉換和數字文字……

部分解決方法

一種可能的簡單解決方法是將 1 字節整數值編碼為(使用雙引號!),這是一種“內部”簡單的 1 字元類型,它實際上使用單字節 storage。直到 Postgres 9.5,它涵蓋了帶符號的 1 字節整數的字節值(十進制範圍為 -128 到 127)。但此後它已被收緊,僅涵蓋以 ASCII 字元表示的正數。所以只有單字節整數範圍的一半。"char"

您可以對0 到 127範圍內的值進行編碼:

SELECT i
    , i::"char"
    , i::"char"::int
FROM   generate_series(0,127) i;

db<>在這裡擺弄

有幾個字元不適合顯示。因此,在儲存之前進行編碼,在顯示之前進行**解碼

請記住:"char"是一種“內部”類型,用於簡單而廉價的列舉。不是為我們在這裡所做的事情而正式設計的,也不能移植到其他 RDBMS。Postgres 項目不提供任何保證。但由於"char"在整個系統目錄中使用,類型不會改變。

您也可以從 進行text轉換,因為負數已被排除。

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