?
このドキュメントでは、 php中國語ネットマニュアル リリース
每個表都有幾個系統(tǒng)字段 ,這些字段是由系統(tǒng)隱含定義的。 因此,這些名字不能用于用戶定義的字段名。請注意這些限制與這個名字是否關(guān) 鍵字無關(guān),把名字用引號括起來并不能讓你逃離這些限制。你實際上不需要注意 這些字段,只要知道它們存在就可以了。
行對象標(biāo)識符(對象ID)。這個字段只有在創(chuàng)建表的時候使用了WITH OIDS 或者是配置參數(shù)default_with_oids的值為真時出現(xiàn)。 這個字段的類型是oid(和字段同名)。 參閱Section 8.16獲取有關(guān)這種類型的更多信息。
包含本行的表的OID。這個字段對那些從繼承層次中選取的查詢特別有用 (參閱節(jié)Section 5.8),因為如果沒有它的話,我們就很難 說明一行來自哪個獨(dú)立的表。tableoid可以 和pg_class的oid 字段連接起來獲取表名字。
插入該行版本的事務(wù)標(biāo)識(事務(wù)ID)。注意:在這個環(huán)境里,一個行版本是一行的 一個狀態(tài);一行的每次更新都為同一個邏輯行創(chuàng)建一個新的行版本。
在插入事務(wù)內(nèi)部的命令標(biāo)識(從零開始)。
刪除事務(wù)的標(biāo)識(事務(wù)ID),如果不是被刪除的行版本,那么是零。在一個可見行版本里, 這個字段有可能是非零。這通常意味著刪除事務(wù)還沒有提交,或者是一個刪除的企圖被回滾掉了。
刪除事務(wù)內(nèi)部的命令標(biāo)識符,或者是零。
一個行版本在它所處的表內(nèi)的物理位置。請注意,盡管ctid 可以用于非??焖俚囟ㄎ恍邪姹荆看?tt class="COMMAND">VACUUM FULL之后, 一個行的ctid都會被更新或者移動。因此ctid是不能作為長期的行標(biāo)識符的。應(yīng)該使用 OID , 或者更好是用戶定義的序列號,來標(biāo)識一個邏輯行。
OID是32位的量,是在同一個集群內(nèi)通用的計數(shù)器上賦值的。對于一個大型或者 長時間使用的數(shù)據(jù)庫,這個計數(shù)器是有可能重疊的。因此,假定OID唯一是非常錯誤的, 除非你自己采取了措施來保證它們是唯一的。如果你需要標(biāo)識表中的行,我們強(qiáng)烈建議 使用序列號生成器。不過,也可以使用OID,只要采取幾個注意事項即可
在使用OID標(biāo)識行的每個表的OID字段創(chuàng)建一個唯一約束。在唯一約束(或者唯一索引) 存在的時候,系統(tǒng)會注意不去生成一個和現(xiàn)有行相同的OID。當(dāng)然,只有在表中的數(shù)據(jù)行 少于232(40億)行的時候才是可能的,而實際上表中的行最好遠(yuǎn)比這個小,要不性能就會 受影響了。
絕對不要假設(shè)OIDs是跨表唯一的;如果你需要全數(shù)據(jù)庫范圍內(nèi)的標(biāo)識,請使用 tableoid和行的OID的組合。
需要OID的表應(yīng)該帶著WITH OIDS創(chuàng)建。 從PostgreSQL開始,WITHOUT OIDS是缺省的。
事務(wù)標(biāo)識符也是32位的量。在長時間運(yùn)轉(zhuǎn)的數(shù)據(jù)庫里,它也可能會重疊。只要我們采取 一些合適的維護(hù)步驟,這并不是很要命的問題;參閱Chapter 23獲取 細(xì)節(jié)。不過,在長時間運(yùn)行的環(huán)境里(超過十億次事務(wù))依賴事務(wù)ID的唯一性并非明智的做法。
命令標(biāo)識符也是32位的量。這樣就在一個事務(wù)里有 232(四十億)條SQL命令的硬限制。 在現(xiàn)實里這個限制應(yīng)該不是什么問題,需要注意的是這個限制是SQL命令的條數(shù), 而不是處理的行版本的條數(shù)。