postgres中的oid vs bytea
我有一個名為 tblA 的表,它有兩列
id_ (numeric 50,0), obj_ oid
例如, tblA 有 1 個條目
id_ | obj_ 1 | 1001
在 pg_largeobject 表中,有三個針對 loid 1001 的條目(3 頁),這很好。但是,pg_largeobject 表有三列(
loid | pageno | data (oid) (integer) (bytea)
我閱讀了有關 oids 和 bytea 的資訊,它們都是不同的數據類型並以這種方式使用。但是我對 pg_largeobject 表結構感到困惑,為什麼它對相同的數據使用兩種數據類型?
postgres 是否在內部將 oid 儲存為 bytea,並且只返回 oid 以供參考?如果它以這種方式工作,為什麼不能只使用數字類型而不是 oid 類型作為參考。
如果不是,這裡的 oid 有什麼用,數據庫中某個 oid 後面是否有任何數據,bytea 列數據是關於什麼的?
oid
as 類型是一個 32 位無符號整數,它代表object id
,並被系統用作通用代理鍵來引用不同的對象,有時是pg_catalog
. 作為大型對象的鍵類型只是其眾多用途之一。其他“對象”,如表、序列、類型等,由它們的oid
.但是我對 pg_largeobject 表結構感到困惑,為什麼它對相同的數據使用兩種數據類型?postgres 是否在內部將 oid 儲存為 bytea,並且只返回 oid 以供參考?如果它以這種方式工作,為什麼不能只使用數字類型而不是 oid 類型作為參考。
它將大對象的內容以小字節頁(~2000 字節)的形式儲存在
pg_largeobject
表中,以loid
ID 或大對象的形式儲存,並(loid,pageno)
以該表的唯一鍵的形式儲存。for 新值的生成器loid
可以比作一個整數序列,只是在環繞 at 之後2^32
,它可以避免與現有值發生衝突。作為使用者,我們不必關心這個,它由內部管理。如果不是,這裡的 oid 有什麼用,數據庫中某個 oid 後面是否有任何數據,bytea 列數據是關於什麼的?
oid 用作句柄,而 bytea 列保存實際的二進制數據。