?
本文檔使用
php中文網(wǎng)手冊(cè) 發(fā)布
PostgreSQL有一個(gè)強(qiáng)大的規(guī)則系統(tǒng), 用以描述視圖和不明確的視圖更新。 最初的 PostgreSQL 規(guī)則系統(tǒng)由兩個(gè)實(shí)現(xiàn)組成:
第一個(gè)能用的規(guī)則系統(tǒng)采用行級(jí)別(row level)的處理, 是在執(zhí)行器(executor)的深層實(shí)現(xiàn)的。 每次訪(fǎng)問(wèn)一條獨(dú)立的行時(shí)都要調(diào)用規(guī)則系統(tǒng)。 這個(gè)實(shí)現(xiàn)在 1995 年被刪除了, 那時(shí)伯克力 Postgres 項(xiàng)目(Berkeley Postgres)的 最后一個(gè)官方版本正轉(zhuǎn)換成Postgres95。
第二個(gè)規(guī)則系統(tǒng)的實(shí)現(xiàn)從技術(shù)角度來(lái)說(shuō)叫查詢(xún)重寫(xiě)(query rewriting)。 重寫(xiě)系統(tǒng)是一個(gè)存在于分析器階段(parser stage) 和規(guī)劃器/優(yōu)化器(planner/optimizer)之間的一個(gè)模塊。 這個(gè)技術(shù)實(shí)現(xiàn)仍然存在。
查詢(xún)重寫(xiě)在Chapter 37里有比較詳細(xì)的討論, 所以無(wú)需再次介紹。只需要說(shuō)明重寫(xiě)器的輸入和輸出都是查詢(xún)樹(shù), 也就是說(shuō),在樹(shù)的語(yǔ)意細(xì)節(jié)的表現(xiàn)或者層次方面沒(méi)有變化。 可以把重寫(xiě)系統(tǒng)當(dāng)作某種宏展開(kāi)的機(jī)制。