麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-管理員手冊-33. 數(shù)據(jù)庫恢復 34. 蛻變測試

2019-09-08 23:33:49
字體:
供稿:網(wǎng)友
第三十三章. 數(shù)據(jù)庫恢復
本節(jié)需要有人來寫.愿做志愿者嗎?(譯注:在(升級)安裝,配置和磁盤存儲等章節(jié)有一些相關(guān)內(nèi)容可以參考,不過確實缺乏災難恢復的材料。:() 

--------------------------------------------------------------------------------

第三十四章. 蛻變測試
內(nèi)容 
蛻變測試環(huán)境 
蛻變測試過程 
蛻變分析 
平臺相關(guān)的比較文件 
蛻變測試指導和分析.
PostgreSQL 蛻變測試是由一套復雜完整的測試,用來測試嵌入在 PostgreSQL 里的的SQL實現(xiàn).它同時測試標準 SQL 操作和 PostgreSQL 的擴展SQL. 
蛻變測試有兩種不同的運行方式:"串行"方式和"并行"方式.串行方式順序運行每個測試腳本,而并行方式同時啟動多個服務器進程以并行運行多組測試.并行測試使我們對進程內(nèi)部通訊和鎖的正確工作有足夠的信心.另一個主要區(qū)別是串行方式測試過程使用一套已經(jīng)安裝了的 postmaster,而并行測試過程測試一套已經(jīng)制作完成但是還沒有安裝的系統(tǒng).(并行測試腳本實際上安裝到一個臨時目錄然后在那里啟動一個私有的 postmaster.) 

有一些正確安裝并且具有完整功能的 PostgreSQL 可能會在蛻變測試中失效,這些主要是因為浮點數(shù)的形式和時區(qū)支持的問題.目前的測試只是簡單的用 "diff" 算法進行評估,因而對一些細小的系統(tǒng)區(qū)別很敏感.當一項測試報告"failed"("失敗")時,只要檢查一下預期和實際的結(jié)果,你就會發(fā)現(xiàn)區(qū)別區(qū)別并不大. 

蛻變測試最初是由 Jolly Chen 和 Andrew Yu 開發(fā)的,并且由 Marc Fournier 和 Thomas Lockhart 做了大量的修改/封裝。從 PostgreSQLv6.1 開始,每個官方發(fā)布的版本都帶有蛻變測試. 

蛻變測試環(huán)境
下面的蛻變測試做了如下假設(shè) (除注明的以外): 
命令是 Unix-兼容的.見下面的注釋.
除了注明的以外,使用的是缺省值.
postgres 用戶是 Postgres 超級用戶.
源文件路徑是 /usr/src/pgsql (也可以是其他路徑).
運行時間路徑是 /usr/local/pgsql (其他路徑也可能).

通常,蛻變測試應該以 postgres 用戶身份運行,因為 'src/test/regress' 目錄和子目錄是由 postgres 所有的.如果你要以其他用戶身份運行蛻變測試,那么該用戶應該對目錄 'src/test/regress' 有寫權(quán)限. 
以前必須把系統(tǒng)時區(qū)設(shè)置為 PST 運行 postmaster,不過現(xiàn)在不需要這樣了。你可以在你自己的正常的 postmaster 配置里運行蛻變測試。測試腳本將設(shè)置 PGTZ 環(huán)境變量以確保與時區(qū)無關(guān)的測試將產(chǎn)生預期的結(jié)果。不過,你的系統(tǒng)必須提供對 PST8PDT 時區(qū)的庫支持,否則時區(qū)無關(guān)測試將失敗。要證實你的系統(tǒng)的確包括這個支持,鍵入: 

setenv TZ PST8PDT
date
上面的 "date" 命令應該返回當前系統(tǒng)在 PST8PDT 時區(qū)的時間.如果 PST8PDT 的數(shù)據(jù)庫不可用,那么你的系統(tǒng)應該以 GMT 返回時間.如果 PST8PDT 時區(qū)不可獲得,你可以顯式設(shè)置時區(qū)規(guī)則: 
setenv PGTZ PST8PDT7,M04.01.0,M10.05.03
蛻變測試的目錄布局如下: 
表 34-1. 目錄布局 
   
 
 目錄 描述 
目錄 描述 
input 利用 make all 將 .source 文件轉(zhuǎn)換成的 'sql' 子目錄里面的一些 .sql 文件 
output 利用 make all 將 .source 文件轉(zhuǎn)換成的在 expected 子目錄里面的 .out 文件 
sql 用于執(zhí)行蛻變測試的 .sql 文件 
expected 代表我們*期望看到*的結(jié)果的 .out 文件  
results 表示結(jié)果的*實際*樣子的 .out 文件同時還用于表拷貝測試的臨時存儲空間 
tmp_check 并行測試腳本創(chuàng)建的臨時安裝目錄 


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

蛻變測試過程
下面命令在 RedHat Linux v 4.2 上用 bash shell 測試過.除了注明的外,它們應該可以在大多數(shù)系統(tǒng)上工作.象 ps 和 tar 這樣的命令在不同平臺上的參數(shù)可能有較大的不同.根據(jù)常識 使用這些命令. 
Postgres 蛻變測試 
用下面命令制作蛻變測試所需要的文件: 
            cd /usr/src/pgsql/src/test/regress
            gmake clean
            gmake all
如果是你第一次運行測試,你不需要鍵入 "gmake clean" .如果這是你第一次運行蛻變測試,你可以忽略 "gmake clean". 
這個步驟把一個帶有 PostgreSQL 的 C 程序編譯成共享庫.本地化的 SQL 腳本和輸出比較文件同樣也為測試而創(chuàng)建.本地化把源文件里的宏替換為絕對路徑名和用戶名. 

如果你想使用"串行"測試過程(它測試一個已經(jīng)安裝的 postmaster),先確保 postmaster 已經(jīng)運行了,可以在一個窗口里鍵入 

            postmaster
或者通過鍵入下面命令把 postmaster 守護運行在后臺 
            cd
            nohup postmaster > regress.log 2>&1 &
后者可能更好一些,因為蛻變測試日志將會相當長( 在下Postgres 7.0 里,60K左右),如果出錯了,你可以查看這些日志. 
注意:不要以 root 身份運行 postmaster.
運行蛻變測試.對于串行測試,鍵入 
            cd /usr/src/pgsql/src/test/regress
            gmake runtest
對于并行測試,鍵入 
            cd /usr/src/pgsql/src/test/regress
            gmake runcheck
串行測試使用你的已經(jīng)在運行的 postmaster 運行測試腳本.并行測試將進行一次完整的 Postgres安裝,把 postgres 安裝到一個臨時目錄里,然后在那里運行一個自己的 postmaster,再運行測試腳本.最后它會卸載自己的 postmaster (不過臨時目錄不會自動刪除). 
你將在屏幕上(和輸出文件 ./regress.out)獲取一系列標明哪項測試通過和那些失敗的輸出.請注意因為平臺相關(guān)的變化,有些測試"失敗"是很正常的.參閱下一節(jié)獲取關(guān)于那些失敗是真正重要的描述. 

有些測試,尤其是 "numeric",可能要花相當長的時間,尤其是在慢的平臺上.請保持耐心. 

在測試和檢查結(jié)果完成后,鍵入 

            cd /usr/src/pgsql/src/test/regress
            gmake clean
以回收測試使用的臨時磁盤空間,如果你運行了一個串行測試,還要鍵入 
            dropdb regression

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

蛻變分析
實際測試結(jié)果在 ./results 目錄里的文件里.這些結(jié)果會與 ./expected 目錄里的預期結(jié)果用 'diff'進行對比.任何區(qū)別都為你保存在 ./regression.diffs 里。(或者如果你愿意地話,你可以自己手工運行diff) 
這些文件可能不能精確地匹配.測試腳本把任何區(qū)別當作“失敗”報告,“失敗” 的測試的失敗原因可能是因為微小的跨平臺的錯誤信息,數(shù)學庫,或輸出格式等的差別.這類"失敗" 并不表明 Postgres 有問題. 

因此,有必要對每個“失敗”的測試的實際差別進行檢查,以發(fā)現(xiàn)這是否是一個真正的問題。下面的段落會試著提供一些判斷這些區(qū)別的重要與否的指導。 

錯誤信息差別
有一些蛻變測試涉及到有意的非法輸入值.錯誤信息可能會來自 Postgres 代碼或來自主機平臺系統(tǒng)路徑.對于后者,信息可能在平臺之間區(qū)別比較大,但應該反映相似的信息.這些信息上的差別將會導致一個"失敗"的蛻變測試,我們可以通過檢查文件發(fā)現(xiàn)這一點.
日期和時間差別
大多數(shù)日期和時間結(jié)果依賴于時區(qū)環(huán)境變量。參考文件是為時區(qū) PST8PDT (伯克利,加州)準備的,因而如果測試沒有設(shè)置為那個時區(qū)是顯然會失敗的。蛻變測試的驅(qū)動器把環(huán)境變量 PGTZ 設(shè)置為 PST8PDT 以保證正確的測試。 
如果你在改為夏時制的日切日或者該天的前天或者后天測試時,在 "timestamp" 測試里的一些查詢可能失敗.這些查詢假設(shè)昨天午夜,今天午夜和明天午夜之間的間隔是精確的 24 小時... 如果是夏時制開始或結(jié)束的日切日,這些(假設(shè))是錯的. 

有些系統(tǒng)不能接受我們推薦的顯式設(shè)置時區(qū)的語法;在這樣的機器上你可能要用不同的 PGTZ 設(shè)置。 

有些使用舊的時區(qū)庫的系統(tǒng)在對 PDT 1970 年前的時間使用夏時制時會出毛病,導致 PDT 1970年以前的時間顯示為 PST。這會導致在測試結(jié)果里的本地化區(qū)別。

浮點數(shù)差別
有些測試涉及到對表中的數(shù)據(jù)列進行 64位 (float8)計算的問題.我們觀察了涉及到 計算 float8 字段的數(shù)學函數(shù)的結(jié)果的差別.float8 和 geometry(幾何類型)測試尤其容易在不同平臺之間產(chǎn)生小差別。這時需要肉眼對這些差別進行比較,以判斷這些差別究竟有多大,我們發(fā)現(xiàn)是在小數(shù)點右邊10位數(shù)。 
有些系統(tǒng)在 pow() 和 exp() 出錯時產(chǎn)生的信號與目前 Postgres 代碼里期望的機制不一樣.

多邊形差別
有些測試涉及到關(guān)于加州奧克蘭/伯克利街區(qū)圖的地形數(shù)據(jù)(譯注:原文是'date',懷疑是'data').這些地圖數(shù)據(jù)是用多邊形表達的,多邊形的頂點使用一對 float8 數(shù)據(jù)表示的(數(shù)字緯度和經(jīng)度).一開始,先創(chuàng)建一些表再把地理數(shù)據(jù)裝入,然后創(chuàng)建一些用多邊形相交的操作符(##)聯(lián)合的兩個表的視圖,最后對視圖進行選擇操作.對比平臺不同產(chǎn)生的差異,差異發(fā)生在小數(shù)點右邊第二位和第三位以后.出現(xiàn)問題的 SQL 語句是下面幾條: 
          QUERY: SELECT * from street;
          QUERY: SELECT * from iexit;
隨機數(shù)差別
在 random.out 里至少有一個測試會產(chǎn)生隨機結(jié)果.這會導致回歸測試中的隨機測試失敗(可能每五次到十次出現(xiàn)一次).鍵入 
          diff results/random.out expected/random.out
會產(chǎn)生僅僅一行或幾行差別.你不必擔心這些,除非隨機測試總是失敗.(另一方面,如果在多次蛻變測試中隨機測試從來不失敗,你可能也要擔心.)
“預期的”文件
./expected/*.out 文件是從最早的單個的由 Jolly Chen 提供的 expected.input 文件修改出來的.為不同開發(fā)平臺生成的這些文件的更新版本在經(jīng)過仔細(?)的檢查后代替了原先的.許多這樣的開發(fā)機運行著在 Ix86 硬件上的 Unix OS 的變種 (FreeBSD,Linux等).最初的 expected.input 文件是在一臺使用 postgres5-1.02a5.tar.gz 源碼樹的 SPARC Solaris 2.4 系統(tǒng)上生成的.我們將它與在一臺 I386 Solaris 2.4 系統(tǒng)上生成的文件進行對比,發(fā)現(xiàn)只有多邊形浮點數(shù)小數(shù)點右邊第三位數(shù)后有差別(參閱后文).最初的 sample.regress.out 文件來自 Jolly Chen 構(gòu)建的 postgres-1.01 版本,我們在這里一起附上以供參考.該文件可能是在一臺 DEC ALPHA 機器上創(chuàng)建的,因為 postgres-1.01 版本的Makefile.global 文件里有 PORTNAME=alpha.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

平臺相關(guān)的比較文件
因為一些測試天生會產(chǎn)生平臺相關(guān)的結(jié)果,我們提供了一個方法以支持平臺相關(guān)的結(jié)果比較文件。通常,一套文件可用于多個平臺;而不是為每個平臺提供一套獨立的比較文件,因此存在一個定義選用哪個比較文件的映射文件。所以,要消除某特定平臺的虛假的測試“失敗”,你必須選擇或者制作一個結(jié)果文件的變種,然后往映射文件里加一行,即是"resultmap"。 
映射文件里的每行都有下面形式 

                testname/platformnamepattern=comparisonfilename
測試名稱只是特定蛻變測試模塊的名稱。平臺名稱模式是一個 expr(1) 風格的模式(也就是說,一個開頭帶有顯式^錨符號的規(guī)則表達式)。它與 config.guess 打印的平臺名匹配。比較文件名是替換結(jié)果比較文件。 
例如:int2 蛻變測試包括一個有意的超過 int2 范圍的數(shù)值的輸入。產(chǎn)生的錯誤信息是平臺相關(guān)的;我們的參考平臺顯示 

    ERROR:  pg_atoi: error reading "100000": Numerical result out of range
但是相當多其他 Unix 平臺顯示 
    ERROR:  pg_atoi: error reading "100000": Result too large
因此,我們提供一個比較文件的變種,int2-too-large.out,該文件包含這樣的錯誤信息的寫法。要消除在 HPPA 平臺上的虛假“錯誤”信息,resultmap 包括 
                int2/hppa=int2-too-large
這樣將在 config.guess 的輸出以 'hppa' 開始的任何機器上觸發(fā)。其他 resultmap 里的行選擇對應其他平臺合適的比較文件。

--------------------------------------------------------------------------------
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 欧美一级做a| 黄色99视频| 史上最强炼体老祖动漫在线观看 | 黄色特级一级片 | 99精品无人区乱码在线观看 | 亚洲成人夜色 | 中文字幕欧美亚洲 | 久久精品电影网 | 中文字幕h | 国产一区二区午夜 | 9丨九色丨国产 | 特级黄色影院 | 欧美精品电影一区 | 亚洲特黄| 久久久久久久久久久久久久久伊免 | 国产精品久久久久久久久粉嫩 | 国产又粗又爽又深的免费视频 | 性 毛片| a在线视频 | 亚洲精品久久久久久久久久 | 色淫影院 | 最新中文在线视频 | 毛片大全免费看 | 欧美精品免费一区二区三区 | 激情大乳女做爰办公室韩国 | 老师你怎么会在这第2季出现 | 午夜视频你懂的 | 欧美大穴| 热久久91| 久久96国产精品久久久 | 日本在线播放一区 | av性色全交蜜桃成熟时 | 美女黄色毛片免费看 | 一级黄色毛片a | 国产一区二区三区视频观看 | 精品一区二区三区毛片 | 国产免费成人 | 精品久久久久久久久久中文字幕 | 99re66热这里只有精品8 | 羞羞视频免费网站日本动漫 | 亚洲一区二区网址 |