資源描述:
《view2postgresql的系統(tǒng)表和數(shù)據(jù)類型》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、View2Postgresql的系統(tǒng)表和數(shù)據(jù)類型和其他人多數(shù)DBMS相比,postgresql在更大程度上使用丫“數(shù)據(jù)驅(qū)動”。為什么這么說呢?按照TomLane的解釋,原因如下:?postgresql使用一套系統(tǒng)表描述數(shù)據(jù)庫表,表中的每一列,每個(gè)索引等等;?除此以外,postgresql同樣使用系統(tǒng)表存儲數(shù)據(jù)類型、函數(shù)、操作符和索引的訪問方法等等信息;?通過增加新的數(shù)據(jù)字典,postgresql可以很方便的擴(kuò)展。我們知道,在關(guān)系數(shù)據(jù)庫屮,為了數(shù)據(jù)庫系統(tǒng)的控制,必須提供數(shù)據(jù)字典的功能。數(shù)據(jù)字典不僅存儲各種對象的描述,而且存儲這些數(shù)據(jù)對象的細(xì)節(jié)信息。K中系統(tǒng)
2、表是Postgresql數(shù)據(jù)庫存放結(jié)構(gòu)元數(shù)據(jù)的地方,表現(xiàn)為存放有系統(tǒng)信息的普通表和視圖。在postgresql每一個(gè)數(shù)據(jù)庫巾都有單獨(dú)的一趕系統(tǒng)表,這麵表人多是在數(shù)據(jù)庫創(chuàng)建吋從template數(shù)據(jù)庫拷貝過來的,描述該數(shù)據(jù)庫的屬性。如果想看源碼的W,可以看看src/include/catalogR隸下的"pg_xxx.h"文件,這牲文件相應(yīng)地定義丫"pg_xxx*?系統(tǒng)表的數(shù)據(jù)結(jié)構(gòu)。另外,indexing.h文件定義了所有的系統(tǒng)表索引,toasting.h定義了所有系統(tǒng)表的TOAST表。2.1基本系統(tǒng)表pg_class表pg_t、lass存儲表以及與表結(jié)構(gòu)類
3、似的數(shù)據(jù)庫對象的信息,包括索引、序列、試圖、復(fù)合數(shù)裾類型、TOAST表等等。每一個(gè)對象在Pg_daSS表中都表現(xiàn)為一個(gè)元組,并且分配一個(gè)OID作為唯一標(biāo)識(該屬性作為隱藏屬性,不能直接訪問)。pg_attribute表pg_attribute表存儲數(shù)掘庠表屮的每個(gè)屬性的信息,對于表的每一個(gè)屬性,都有一個(gè)對應(yīng)的元組描述其屬性,例如屬性名、屬性的數(shù)據(jù)類型、默認(rèn)值、非NULL約朿等等。pg」ndex表pgjndex表存儲索引的具體信息,把索引和索引對應(yīng)的表關(guān)聯(lián)起來。這里需要說明的是,由于索引也是表,所以索引也在pg_class表和pg_attribute表中右
4、對成的元組。因此,pg_index表中的姆個(gè)元組包含索引在pg_class表巾對應(yīng)的元組的OID和基礎(chǔ)表(即索引建立在該表上)的OID,同吋,也包含了計(jì)算索引所使用的表的列的信息以及索引的運(yùn)算表達(dá)式。以上是postgresql數(shù)據(jù)庫中最ffi要的三張系統(tǒng)表,還有很多其他的表就不在此一一列出了,比如pg_tablespace、pg_database等等。這些表的信息"f以通過select語句來獲取。2.2與函數(shù)相關(guān)的系統(tǒng)表pg_proc表pg_proc表對函數(shù)進(jìn)行了定義。每一個(gè)函數(shù)在該表屮都對應(yīng)一個(gè)組,也含函數(shù)名。輸入?yún)?shù)類型,返回類型以及對函數(shù)的定義(可
5、能是文本,可能是一段編譯型語句,也可能是對可執(zhí)行代碼的引用)。編譯過的函數(shù)可以靜態(tài)地鏈接到服務(wù)器上,或者在存儲在共亨庫內(nèi),當(dāng)?shù)谝淮问褂迷搸鞎r(shí)動態(tài)的裁入<這些編譯過的函數(shù)一般都使用C編寫,當(dāng)然理論上你可以有別的選擇。pg」anguage表Pg_langUage表定義了函數(shù)實(shí)現(xiàn)所使用的語言。主耍支持了C語言和SQL語句。一些可選的語言括pl/pgsql、tel和ped。這些語言是由動態(tài)鏈接的處理程序提供支持的,服務(wù)器內(nèi)核并不關(guān)注其中細(xì)節(jié)。以下足一些示例函數(shù):C:int4squarc_int4(int4x)returnx氺x;}把上面的函數(shù)編譯成共享庫文件,這
6、樣聲明:CREATEFUNCTIONsquare(intd)RETURNSint4AS’/path/to/square.so,,’square_int4,LANGUAGE’(T;PL/PGSQL:CREATEFUNCTIONsquare(int4)RETURNSint4AS’beginreturn$1*$1;end;’LANGUAGEplpgsql’與聚集函數(shù)相關(guān)的系統(tǒng)表2.3pg_aggregate表pg_aggregate表定義了我們熟悉的這些聚集函數(shù),比如:min()、max()、count()等。特個(gè)聚集函數(shù)涉及一個(gè)運(yùn)行時(shí)的數(shù)據(jù)類型,一個(gè)更新函數(shù)
7、,一個(gè)最終輸出函數(shù),共冋完成了一個(gè)聚集函數(shù)的功能。--Theworkingstateisa2-elementintegerarray,sumandcount.—Weusesplit(n)asaquick-and-dirtywayofparsingww.visal58.comtheinputarray--value,whichcomesinasastringlike’{l,2}’.Therearebetterways…createfunctiontcl_int4_accum(int4[],int4)returnsint4[]assetstate[split
8、$1〃{,}〃]setnewsum[expr{[lindex$state1]+$