postgresql的系统列(system cloumns)
每種數(shù)據(jù)庫中都保留了自己所有的關(guān)鍵字,在表的定義過程中同樣數(shù)據(jù)庫保存了自己的系統(tǒng)列。看完關(guān)于postgresql的系統(tǒng)列部分的文檔,還勾起了我想了解postgresql事務(wù)如何進(jìn)行管理的沖動(dòng)。先對(duì)postgresql的系統(tǒng)列進(jìn)行一下了解,重要的是從中得到一些設(shè)計(jì)思想上的東西。
對(duì)于系統(tǒng)的保留關(guān)鍵字,都是禁止或者不建議用戶進(jìn)行定義時(shí)使用的詞語。postgresql中的系統(tǒng)列是不允許作為用戶定義的列名字段,在現(xiàn)實(shí)數(shù)據(jù)庫設(shè)計(jì)過程中很少使用這些字段名稱,所以不需要特別的關(guān)注,需要知道它們的存在。
oid
行對(duì)象表示符。postgresql為每個(gè)表的所有列自動(dòng)添加該值(除非創(chuàng)建表時(shí)采用WITHOUT OIDS選項(xiàng),該情況下oid列不顯示),該列與類型同名。
在oracle中有rowid列,正常情況下是不顯示的,也是系統(tǒng)自動(dòng)生成的值,不是主角不多說。
tableoid
表對(duì)象表示符。該列對(duì)于從繼承層次中進(jìn)行查詢非常有用,如果沒有它,就很難說清行記錄來自那個(gè)表。tableoid列與數(shù)據(jù)字典pg_class的oid進(jìn)行關(guān)聯(lián)可以獲取表名。
oracle中似乎沒有tableoid專有列名,同樣可以通過user_objects視圖查到表的id,對(duì)于判斷行屬于哪一列,oracle將對(duì)象的id號(hào)直接放到了rowid中。
oracle的rowid采用64進(jìn)制表示方式,由18個(gè)字符表示:對(duì)象編號(hào)的6字符+文件編號(hào)的3字符+塊編號(hào)的6字符+行編號(hào)的3字符,就是說直接找到行就能知道它屬于那個(gè)文件,那個(gè)對(duì)象,在那個(gè)塊上。
xmin
行版本的插入事務(wù)標(biāo)識(shí)。(行版本代表著行的狀態(tài),行的每次更新會(huì)創(chuàng)建新的版本。)
如果對(duì)postgresql的事務(wù)管理設(shè)計(jì)方式不了解,很難清楚這個(gè)東西如何工作的。接下來可以好好了解一下事務(wù)的管理方式。
cmin
插入事務(wù)內(nèi)的命令標(biāo)識(shí)。(該值從0開始)。
這個(gè)更難理解了,插入事務(wù)能有多少命令標(biāo)識(shí)?可以推測(cè)一下插入的方式不同該值可能不同,還是插入操作所處于不同的狀態(tài)?,還是需要去了解事務(wù)的管理方式。
xmax
刪除事務(wù)標(biāo)識(shí)。對(duì)于非刪除的行版本該值是0。該值為非0值時(shí)表示刪除事務(wù)還沒有提交,或者試圖進(jìn)行回滾。
也就是說明了該參數(shù)值至少有三種,用于表示刪除處于的狀態(tài)。
cmax
刪除事務(wù)內(nèi)部的命令標(biāo)識(shí),或者為0。
ctid
行版本在表中的物理位置。盡管ctid能夠快速實(shí)現(xiàn)定位版本,但是經(jīng)過VACUUM FULL之后,行的ctid就會(huì)移動(dòng)或者更新。由此ctid不適于作行的行的長(zhǎng)期標(biāo)識(shí)符。
ctid表示的物理位置,如果VACUUM執(zhí)行發(fā)生了行數(shù)據(jù)的物理移動(dòng),那索引又要如何?索引中指向表行位置的id又如何變化,目前對(duì)VACUUM沒有深入了解,只能猜想是跟著變化。
文檔中提到OID是32位的。很難對(duì)oid的唯一性作出假設(shè)。
事務(wù)標(biāo)識(shí)與命令標(biāo)識(shí)都是32位。
雖然從幾個(gè)關(guān)鍵字很難解釋事務(wù)管理方式,但是從中也能窺探一點(diǎn)。對(duì)象都是存放在文件中的,對(duì)象與文件之間又是如何關(guān)聯(lián)在一起的?會(huì)不會(huì)也象oracle的rowid一樣包含著文件號(hào)?tableoid與行之間的關(guān)系如何?弄清楚這些問題后,對(duì)postgresql對(duì)數(shù)據(jù)記錄如何進(jìn)行定位的問題也就能夠了解很多。看來要了解更多的postgresql知識(shí)需要解決不少問題。
?
參考文檔:http://www.postgresql.org/docs/8.0/interactive/ddl-system-columns.html
轉(zhuǎn)載于:https://www.cnblogs.com/daduxiong/archive/2010/08/12/1798021.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的postgresql的系统列(system cloumns)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易想商城V4.7.1 过期到期解决办法
- 下一篇: qt 程序windows 上发布