W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
當(dāng)你在PostgreSQL中找到一個(gè)缺陷時(shí),我們希望聽到關(guān)于它的事情。你的缺陷報(bào)告在使得PostgreSQL更可靠的工作上扮演了重要的角色,因?yàn)樵僦?jǐn)慎也不能保證PostgreSQL的每一部分都能在每一個(gè)平臺上、每一種環(huán)境中工作。
下列建議目的是協(xié)助你把缺陷形成便于高效處理的形式。沒有人被要求遵循它們,但是這樣做對每個(gè)人都好。
我們無法保證馬上修復(fù)每一個(gè)缺陷。如果缺陷是明顯的、嚴(yán)重的或者影響很多用戶,那么這是個(gè)好機(jī)會讓某人去檢查它。也可能我們會告訴你升級到一個(gè)新的版本來查看缺陷是否在該版本里也存在?;蛘呶覀兛赡軟Q定在我們計(jì)劃中的某些重大重寫完成之前缺陷無法被修復(fù)?;蛘咭苍S就是修復(fù)該缺陷太困難并且在日程表上還有更多重要的事情要做。如果你需要立即得到幫助,考慮聯(lián)系一個(gè)商業(yè)支持。
在你報(bào)告一個(gè)缺陷之前,請閱讀再閱讀文檔來確認(rèn)你真的可以做你正在嘗試的任何東西。如果從文檔中無法清楚地知道你是否能做某事,也請把它報(bào)告給我們;這是一個(gè)文檔中的缺陷。如果發(fā)現(xiàn)一個(gè)程序做的事情和文檔說的不一樣,那就是一個(gè)缺陷。那可能包括(但不限于)下列情況:
一個(gè)程序帶有一個(gè)致命信號或者一個(gè)操作系統(tǒng)錯誤消息終止,它們會指出程序中的一個(gè)問題(一個(gè)反例是一個(gè)“磁盤滿”消息,因?yàn)槟阒荒茏约盒迯?fù)它)。
一個(gè)程序?qū)θ魏谓o定的輸入產(chǎn)生錯誤的輸出。
一個(gè)程序拒絕接受合法的輸入(按文檔定義)。
一個(gè)程序接受非法輸入,并且沒有提示或者錯誤消息。但是記住你對非法輸入的概念可能是我們認(rèn)為的一個(gè)擴(kuò)展或兼容性。
PostgreSQL根據(jù)在被支持平臺上的指導(dǎo)無法編譯、建立或者安裝。
這里的“程序”指任何可執(zhí)行文件,不僅僅是后臺進(jìn)程。
很慢或者很占資源不一定是一個(gè)缺陷。閱讀文檔或者在郵件列表中尋求幫助來調(diào)優(yōu)你的應(yīng)用。無法符合SQL標(biāo)準(zhǔn)也不一定是一個(gè)缺陷,除非文檔中已經(jīng)明確地聲明指定特性是兼容的。
在你繼續(xù)之前,檢查 TODO 列表和 FAQ 來看你的缺陷是否為已知。如果你不能理解 TODO 列表中的信息,那就報(bào)告你的問題。至少我們可以讓 TODO 列表更清晰。
關(guān)于缺陷報(bào)告要記住的最重要的事情是說明事實(shí)并且只說明事實(shí)。不要推斷你覺得什么出錯了、“它看起來在做”什么或者程序的哪一部分出錯了。如果你不熟悉實(shí)現(xiàn),你可能猜錯并且不會幫到我們。而且即使你熟悉實(shí)現(xiàn),受過訓(xùn)練的解釋是巨大的補(bǔ)充但是也無法替代事實(shí)。如果我們想要修復(fù)缺陷,我們還是需要首先重現(xiàn)它。報(bào)告最基本的事實(shí)相對直接(你可以直接從屏幕上拷貝和粘貼它們)但是可能有太多重要的細(xì)節(jié)被略去,因?yàn)槟承┤丝赡苷J(rèn)為它不重要(所以沒有包含在報(bào)告中)或者報(bào)告可能以其他方式被理解。
下列項(xiàng)應(yīng)該被包含在每一個(gè)缺陷報(bào)告中:
從程序啟動開始的準(zhǔn)確步驟序列,我們需要它們來重現(xiàn)問題。這應(yīng)該是自包含的,如果輸出是依賴于表中的數(shù)據(jù),那么只發(fā)送一個(gè)裸的SELECT
語句而不發(fā)送前面的CREATE TABLE
和INSERT
語句是不夠的。我們沒有時(shí)間來對你的數(shù)據(jù)庫模式做逆向工程,而且即使我們能夠通過我們自己的數(shù)據(jù)來彌補(bǔ),我們也很可能會錯過問題。
SQL 相關(guān)問題的一個(gè)測試樣例的最佳格式是一個(gè)可以通過psql前端運(yùn)行并展示該問題的文件(注意不要在你的~/.psqlrc
啟動文件中包含任何東西)。一種簡單的創(chuàng)建該文件的方法是使用pg_dump來轉(zhuǎn)儲出表聲明和設(shè)置場景的數(shù)據(jù),然后增加問題查詢。我們鼓勵你最小化你的例子的尺寸,但是這不是絕對必要的。如果缺陷是可重現(xiàn)的,我們以兩種方法都可以找到它。
如果你的應(yīng)用使用某些其他客戶端接口(例如PHP),那么請嘗試隔離出錯的查詢。我們將可能無法設(shè)置一個(gè)網(wǎng)頁服務(wù)器來重現(xiàn)你的問題。在任何情況中記住提供準(zhǔn)確的輸入文件,不要猜測問題是因?yàn)?span id="cku22q3" class="quote">“大文件”或“中等大小的數(shù)據(jù)庫”等而發(fā)生,因?yàn)檫@些信息用起來太不準(zhǔn)確。
你得到的輸出。請不要說它“無法工作”或者“崩潰了”。如果有一個(gè)錯誤消息,請展示它,即使你不理解它。如果程序帶著一個(gè)操作系統(tǒng)錯誤而終止,請說出它。如果根本沒有發(fā)生任何事情,也說出來。雖然你的測試樣例的結(jié)果是一次程序崩潰,但是顯然它不一定會在我們的平臺上發(fā)生。如果可能的話,最簡單的事情就是從終端上復(fù)制你的輸出。
如果你正在報(bào)告一個(gè)錯誤消息,請獲得消息的最冗長的形式。在psql中,預(yù)先執(zhí)行\set VERBOSITY verbose
。如果你在從服務(wù)器日志抽取消息,設(shè)置運(yùn)行時(shí)參數(shù)log_error_verbosity為
verbose
,這樣所有的細(xì)節(jié)將被記錄在日志中。
在致命錯誤的情況中,客戶端報(bào)告的錯誤消息可能不會包含所有可用的信息。請也看看數(shù)據(jù)庫服務(wù)器的日志輸出。如果你沒有保留你的服務(wù)器的日志輸出,這將是一個(gè)最好的時(shí)機(jī)開始記錄它。
你所期望的輸出也是需要說明的很重要的內(nèi)容。如果你只寫“這個(gè)命令給我那個(gè)輸出。”或“這不是我所期待的。”,我們可能自己運(yùn)行它、掃描輸出并且認(rèn)為它看起來 OK 并且正是我們期望的。我們不會花時(shí)間來理解你的命令背后的準(zhǔn)確語義。特別是避免僅僅說“這不是 SQL 所說的/Oracle 所作的。”從 SQL中挖掘出正確的行為不是一個(gè)有趣的工作,我們也沒法去了解所有的其他關(guān)系型數(shù)據(jù)庫的行為(如果你的問題是一個(gè)程序崩潰,你顯然可以忽略這一項(xiàng))。
任何命令行選項(xiàng)和其他啟動選項(xiàng),包括任何相關(guān)的環(huán)境變量或者你從默認(rèn)修改過的配置文件。再次,請?zhí)峁?zhǔn)確的信息。如果你在使用一個(gè)預(yù)打包的發(fā)布并且它在系統(tǒng)啟動時(shí)自動開始數(shù)據(jù)庫服務(wù)器,你應(yīng)當(dāng)嘗試找出它是怎樣啟動的。
任何你做的和安裝指導(dǎo)上不同的地方。
PostgreSQL的版本。你可以運(yùn)行命令SELECT version();
來找出你連接到的服務(wù)器的版本。大部分可執(zhí)行程序也支持一個(gè)--version
選項(xiàng),至少postgres --version
和psql --version
可以工作。如果該函數(shù)或選項(xiàng)不存在,那么你的版本就已經(jīng)老得無法保證可以升級了。如果你運(yùn)行的是一個(gè)預(yù)打包的版本(如
RPM),請說明并且包括該包的任何子版本。如果你在談?wù)撘粋€(gè) Git 快照,也請說明并且包括提交哈希值。
如果你的版本比 13.1 更老,我們將幾乎肯定會告訴你進(jìn)行升級。在每一個(gè)新的發(fā)布中都包含很多缺陷修復(fù)和改進(jìn),因此很有可能你在舊版本PostgreSQL中碰到的一個(gè)缺陷已經(jīng)被修復(fù)了。我們對使用舊版本PostgreSQL的站點(diǎn)只提供有限的支持。如果你需要更多支持,請考慮咨詢一個(gè)商業(yè)支持。
平臺信息。這包括內(nèi)核名稱和版本、C 庫、處理器、內(nèi)存信息等等。在大部分情況中,提供廠家和版本就足夠了,但是不要假定每個(gè)人都了解“Debian”中到底包含什么或者每個(gè)人都運(yùn)行在 x86_64 上。如果你碰到的是安裝問題,那么你機(jī)器上的工具鏈(編譯器、make等等)的信息也是需要被報(bào)告的。
不要擔(dān)心你的缺陷報(bào)告變得太長。這就是生活。最好是第一次就報(bào)告所有的東西,而不是讓我們?nèi)哪隳抢镌儐枴T诹硪环矫?,如果你的輸入文件太大,最好先問問是否有人有興趣去看它。這里有一篇文章勾勒了一些報(bào)告缺陷的提示。
不要把你所有的時(shí)間花費(fèi)在指出輸入中的哪些改變讓問題消失。這可能對解決問題沒有什么幫助。如果發(fā)現(xiàn)缺陷不能被立馬解決,你將還有時(shí)間去尋找和分享你的解決方法。同樣,不要浪費(fèi)你的時(shí)間去猜測為什么缺陷會存在。我們將盡快找出原因。
在編寫一份缺陷報(bào)告時(shí),請避免使用含糊的術(shù)語。這個(gè)軟件包從整體上被稱為“PostgreSQL”,有時(shí)會簡稱為“Postgres”。如果你要談?wù)撎囟ǖ暮蠖诉M(jìn)程,不要只說“PostgreSQL 崩潰了”。一個(gè)單一后端進(jìn)程的崩潰和其父 “postgres”進(jìn)程崩潰是完全不同的;當(dāng)你想說一個(gè)單一后端進(jìn)程垮掉時(shí),請不要說“服務(wù)器崩潰了”,反之亦然。還有,如交互式前端“psql”等的客戶端程序和后端是完全獨(dú)立的。請盡量確定問題是發(fā)生在客戶端還是服務(wù)器端。
為了防止出現(xiàn)大量的垃圾郵件,除非您訂閱,否則上述所有列表都將被審核。 這意味著在郵件被發(fā)送之前,將有一些延遲。 如果您想訂閱列表,請?jiān)L問https://lists.postgresql.org/獲取說明。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: