oid: 行的物件識別碼(物件識別碼)。這個欄位只有在建立表的時候使用了 WITH OIDS ,或者是設定了default_with_oids 配置參數時出現。 這個欄位的類型是 oid (和欄位同名)。
例子:
複製代碼 代碼如下:
CREATE TABLE pg_language
(
lanname name NOT NULL,
lanowner oid NOT NULL,
lanispl boolean NOT NULL,
lanpltrusted boolean NOT NULL,
lanplcallfoid oid NOT NULL,
lanvalidator oid NOT NULL,
lanacl aclitem[]
)
WITH (
OIDS=TRUE
);
OID 是 32 位的量,是在同一個叢集內通用的計數器上賦值的。 對於一個大型或者長時間使用的資料庫,這個計數器是有可能重疊的。 因此,假設 OID 是唯一的是非常錯誤的,除非你自己採取了措施來保證它們是唯一的。
XID:事務ID,也是 32 位的量。在長時間運轉的資料庫裡,它也可能會重疊。重疊後資料庫就有可能出錯,所以需要採取措施解決。 只要我們採取一些合適的維護步驟,這並不是很要命的問題。比如我們定義做vaccum。或者手動重設。
重設用下面的命令:
$ pg_resetxlog --help
pg_resetxlog命令是重設PostgreSQL事務log的。
使用方法:
pg_resetxlog [OPTION]... DATADIR
選項參數:
-e XIDEPOCH 設定下一個事務ID EPOCH
-f 實施強制更新
-l TLI,FILE,SEG 強制設定新事務log的最小WAL開始位置
-m XID 設定下一個MULTI事務ID
-n 不做更新,只是取出現在的控制值,實驗用的命令
-o OID 設定下一個OID,重設OID
-O OFFSET 設定下一個MULTI事務ID的OFFSET
-x XID 設定下一個事務ID,重設XID
寫了這麼一些,對內部是怎麼回事感覺自己還是沒有理清楚。呵呵!!