| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | 前言 | Fast Forward | Next |
當您在 PostgreSQL 裡碰到臭蟲時, 我們也希望能聽到它。您的臭蟲匯報是將 PostgreSQL 做得更加可靠的一個非常重要的部分, 因為再細緻的工作也不能保證在任何情況任何平台下 PostgreSQL的每一個部分都能正常工作。
下面的建議試圖幫助您正確格式化臭蟲報告, 這樣這些報告就能夠以一種有效的方法處理。 我們不強迫任何人遵循這些東西,但是這樣做對我們每個人都有好處。
我們不能保證能夠馬上修補每個臭蟲。如果臭蟲是顯而易見的, 很關鍵的或者影響許多用戶,那麼很有可能有些人會認真檢查它們。 同樣我們也可能是告訴您升級到一個新版本, 看看臭蟲是否仍然存在。否則,我們可能會說這個臭蟲在我們正計劃的幾個主要改寫之前不會得到修補。 或者這個臭蟲只是太費事了,而且目前的日程資料表上有更重要的事情要做。如果您立即需要幫助, 那麼請考慮獲取一個商業性的支援。
在您報告臭蟲之前這樣的問題之前,請一再仔細地讀文件, 以確認您確實可以做您在做的事情。如果文件中對您能否處理您所做的事情並不清楚,也請您匯報過來; 因為這個是文件的臭蟲。如果發現您的程序的資料表現不像文件裡說的那樣,那就是一個臭蟲。 這時可能包括(不過不一定局限於)下面的現象:
程序帶著一個致命信號或者一個指向程序錯誤的操作系統錯誤訊息 (一個反例是一個"disk full"(磁盤滿)訊息,因為這樣的錯誤必須在 Postgres外部進行修復)退出。
程序對給出的任何輸入都產生錯誤的輸出。
程序拒絕接收(文件裡定義的那些)有效的輸入。
程序對非法輸入沒有生成任何提示或者錯誤訊息。 但是需要注意的是,您認為非法的輸入可能是我們設想的擴展或者與傳統兼容的做法。
在支援的平台上根據教學未能成功地編譯、製作或安裝 PostgreSQL。
這裡的"程序"代資料表任何可執行文件,而不僅僅是後端伺服器。
速度慢或者資源消耗大不算是臭蟲。 請閱讀文件或者提交郵件列資料表之一獲取調節您的應用(的性能)的幫助。 未能遵循 SQL 標準也不算是一個臭蟲, 除非(文件)明確聲明了遵守該特定特性。
在您準備繼續匯報臭蟲之前,請檢查 TODO 列資料表和 FAQ, 看看您報告的臭蟲是否已知。如果您不能解析 TODO 列資料表裡面的訊息,請匯報您的問題。 至少我們可以把 TODO 列資料表做得更清晰。
關於匯報臭蟲需要記住的最重要的事就是寫出所有事實並且只寫事實。 不要推測您認為是什麼錯了,什麼"看起來像",或者是推測程序的哪一部分失靈了。 如果您不熟悉 PostgreSQL 的實現, 您很可能猜錯因而不能幫我們任何忙。 而且即使您熟悉 Postgres 的實現, 提煉出來的解釋也只是事實的補充而不是代替。 如果我們準備修理這個臭蟲,我們仍然需要首先親自看到臭蟲的出現。 報告簡單的事實相對而言比較直接(您可以從屏幕上拷貝和粘貼), 不過經常發生的是很多人認為這些事實不重要而忽略了重要的細節, 否則匯報總是能夠被我們理解。
下面的條目應該包含在所有臭蟲匯報裡面:
從 程序啟動開始到重現問題的準確步驟順序。 這應該自包含;要知道如果輸出將依賴於資料表中的資料時, 光把一個光禿禿的SELECT語句發過來而不把前面的 SELECT 和INSERT語句發過來是不夠的。 我們沒有時間分析您的資料庫結構,而且如果我們試著建立我們自己的資料, 那我們就有可能錯過問題。
測試與 SQL 語 言有關的問題的最好的格式是一個可以透過 psql 前端執行並顯示問題的文件。 (確保在您的 ~/.psqlrc 啟動文件裡面沒有任何東西。) 一種比較簡單的建立這個文件的方法就是用 pg_dump 傾倒資料表聲明和仿真的資料,以及有毛病的查詢。 我們鼓勵您最小化您的例子,但這不是非做不可的事情。 如果臭蟲是可以復現的,那麼兩種方式都能幫助我們找到它。
如果您的應用使用其他客戶端接口,比如說PHP, 那麼請設法隔離出有毛病的查詢。我們可能不會設置一個 web 伺服器來復現您的問題。 不管怎麼說,請記住提供準確的輸入文件,而不要猜測問題會在"大文件"或者"中等尺寸的資料庫"等等的身上發生。 因為這樣的訊息太不確切,因而沒有什麼用處。
您得到的輸出。請不要說它"不起作用"或者"失靈了"。如果有錯誤訊息, 請寫明,即使您不能理解也一樣。如果程序帶著操作系統錯誤退出,也請寫清楚。 如果什麼也沒有發生,就照直說。即使您的測試實例是程序崩潰或者其他顯而易見的現象, 它也有可能不會在我們的平台上發生。如果可能,最簡單的事情是從終端拷貝輸出。
注意: 如果您報告一個錯誤訊息,請從訊息中獲取最冗長的版本。 在 psql 裡,事先執行 \set VERBOSITY verbose 就行。 如果您從伺服器日誌裡抽取訊息,那麼就把執行時參數 log_error_verbosity 設置為 verbose, 這樣就會報告所有細節。
注意: 如果是致命錯誤,客戶端提供的訊息可能不會包含所有能得到的訊息。 這種情況下, 還要看看資料庫伺服器的輸出。如果您沒有保留您的伺服器輸出,那麼現在是做這件事的好機會。
還有一樣很重要的事是聲明您期望的輸出。 如果您只是寫到"這條命令給我這樣的輸出。"或者"這不是我期望的。",我們可能自己執行它,檢查輸出, 然後認為看上去很好並且正是我們所期望的輸出。 我們不應該把時間花在解析您的命令的語義上。 特別是要避免僅僅說"這不是 SQL 說的/Oracle 做的那樣。" 從 SQL 裡挖掘出正確的行為可不是好玩的事情, 我們也不能知道所有其他的關係資料庫的特性是怎樣的。(如果您的問題是程序崩潰,顯然您可以忽略這個條目。)
任何命令行選項和其他啟動選項,包括相關的環境變量或者您從預設值修改以後的配置文件。 同時,還要準確。如果您使用啟動系統時自動啟動資料庫伺服器的預打包的版本, 您應該試著找出這些東西是怎樣實現的。
任何您做得與安裝教學不一致的東西。
PostgreSQL 版本。您可以執行命令 SELECT version(); 來檢查您正在執行的版本是什麼。 大多數可執行程序支援 --version 選項; 至少 postmaster --version 和 psql --version 應該是可以用的。 如果這個函數或者選項不存在,那我們很可能除了告訴您升級外不會說別的東西。 如果您執行預打包的版本,例如 RPM,請說明, 包括那個包可能有的任何子版本。如果您說的是 CVS 快照,說明之,包括它的日期和時間。
如果您的版本比 8.0.0 低,我們幾乎肯定要告訴您升級。 在每個新版本裡都修補了大量的臭蟲,所以您在老版本的 PostgreSQL 裡碰到的毛病很有可能已經修復掉了。 我們只能對那些使用老版本的 PostgreSQL 的節點提供有限的支援;如果您要求的比我們能提供的更多, 那麼考慮一下商業的合同支援。
平台訊息。這包括內核名稱和版本,C 庫,處理器,儲存器訊息。 大多數情況下只需要匯報供應商和版本,但是不要指望每個人都很清楚 "Debian" 包括什麼東西或者說每個人都執行在 Pentium 上。如果您安裝有問題, 那麼還要詳細匯報您機器上的工具的訊息(編譯器,make 等)。
不要怕您的臭蟲匯報太長。這就是生活。 一開始就匯報所有的事情要比讓我們從您那裡擠出事實要好。另外, 如果您的輸入文件非常巨大,先問問有沒有人有興趣查看它也是合理的。
不要把您的時間花在尋找如何透過修改輸入來消除問題的方法上。 這樣很可能不會對解決問題有任何幫助。 如果發現不能直接修理臭蟲,您還有時間來查找和共享您的繞過方法。 還有,我們再說一便,不要在猜測臭蟲 的位置上面浪費時間。我們能夠及時找到錯誤。
在您書寫臭蟲匯報時,請選用不易混淆的術語。 軟件包本身被稱為"PostgreSQL",有時簡稱為 "Postgres"。 當您特指後端伺服器進程時, 請明確說明,而不要僅僅是說"PostgreSQL 崩潰了"。 一個獨立後端伺服器進程的崩潰和父進程 "postmaster" 崩潰是相當不同的; 如果您是說獨立後端進程崩潰了,那麼請不要說 "postmaster 崩潰",反之亦然。同樣,客戶端程序, 比如交互式前端 "psql" 是和後端完全獨立的。 請試圖說明清楚問題是出現再客戶端還是伺服器端。
通常,把匯報發到 <pgsql-bugs@postgresql.org>臭蟲匯報郵件列資料表。 我們要求您為您的電子郵件消息選用一個描述性的題目, 也許就用錯誤訊息的一部分。
另外一個方法是填充 web 資料表單形式的臭蟲報告,您可以在項目的 web 站點 http://www.postgresql.org/ 找到。 用這種方法輸入一個臭蟲報告會導致它被發送到 <pgsql-bugs@postgresql.org> 郵遞列資料表。
不要把臭蟲匯報發送到任何用戶郵件列資料表裡,例如 SQL 語言郵件列資料表 <pgsql-sql@postgresql.org> 或 通用話題郵件列資料表<pgsql-general@postgresql.org>。這些郵件列資料表用於回答用戶問題, 而且那些訂閱者通常不希望接收臭蟲匯報。 更重要的是,他們很可能不會修理這些臭蟲。
還有,請不要向開發者郵件列資料表 <pgsql-hackers@postgresql.org> 發送臭蟲匯報。這個列資料表用於討論 PostgreSQL 的開發, 因而我們很希望能和臭蟲匯報分離開。 如果修理某個毛病需要更多評論, 我們可能會在這個pgsql-hackers列資料表開一個關於您的臭蟲的討論會。
如果您覺得文件有問題,請發電子郵件到文件郵件列資料表 <pgsql-docs@postgresql.org>. 在您的問題匯報裡面指明您認為哪部分。
如果您的臭蟲是一個在不支援平台上的移植性問題,向 移植性問題郵件列資料表 <pgsql-ports@postgresql.org>, 發送電子郵件,這樣我們(還有您)可以一起嘗試把 PostgreSQL 移植到您的平台上。
注意: 由於我們不願意看到的各種各樣的垃圾郵件, 上面的所有電子郵件地址都是封閉的郵件地址。 也就是說,您需要先申請,然後才能發帖子。 (不過,您用 web 資料表單提交臭蟲報告的時候用不著申請。) 如果您只是想發送郵件而不想接受列資料表的往來的郵件, 您可以提交郵件並且把您的提交選項設置為nomail。 如果需要更多的訊息, 您可以向 <majordomo@postgresql.org> 發送一封郵件,郵件的正文只有一個單詞help 就可以了。