2011-05-05 197 views
1

我正在使用Django ORM訪問PostgreSQL數據庫,並且在罕見的事件中,Django將拋出DatabaseError,如django.db.utils.DatabaseError: invalid page header in block 299560 of relation base/83966/84778Postgres數據庫錯誤無效頁頭

我研究過這個,看起來是因爲數據庫被破壞了。這非常令人沮喪,因爲我總是在重新引導時徹底關閉數據庫,並且我可以在磁盤驅動器上運行的每個檢查都表明磁盤本身沒有任何問題。因此,我只能斷定PostgreSQL實際上並不符合ACID標準,並且在極少數情況下會破壞我的數據。

我已經能夠找到的唯一修復方法是刪除並重新創建我的數據庫。顯然,這不是一個真正的解決辦法,因爲我正在丟失所有的數據。有沒有其他解決方法,或者我應該切換到更可靠的數據庫,如MySQL?

我在Ubuntu 10.04上運行Postgresql-8.4.8。

+0

順便說一句,曾經去過.org或.info網站?猜猜哪個數據庫服務於您的DNS解析請求? PostgreSQL是堅實的24/7分貝,但它不能在不可靠的硬件上可靠地運行。這臺機器在測試中燒了多少? – 2011-05-06 17:14:09

回答

1

大多數情況下,您看到這種情況時,您的內存不好或驅動器壞。 PostgreSQL和MySQL的不同之處在於PostgreSQL可以看到並投訴,而MySQL通常不會停下來。我認爲當機器破壞數據存儲時停止的數據庫是更可靠的數據庫,因爲它可以讓你知道在你的系統中存在問題。

順便說一句,只要硬盤驅動器沒有躺在fsync上,BTG,PostgreSQL就可以在緊急關機(將插頭拔出機器背面)的情況下倖免於難。

嘗試Memtest86是,看看你的內存的確定,這樣做

須藤DD如果= /開發/空的=的/ dev/SDC1

,看看你得到任何錯誤。你的dmesg或消息中有關於驅動器讀寫錯誤的任何記錄?

+1

另外,你是否每次都得到完全相同的錯誤或者它是否移動?一旦我能夠通過重建索引而擺脫困境,我就遇到了一個壞塊。如果是這種情況,那麼知道有問題的文件是索引還是表是很有幫助的。 – 2011-05-07 00:47:54

+0

有沒有類似的命令來檢查,如果我的機器是Windows? – 2012-01-09 03:44:25

+0

memtest86 +可以從現有的ubuntu光盤上使用,所以你不必安裝linux或任何東西。它只是CD中的一個啓動選項,我認爲它的內容類似於「檢查內存」 – 2012-01-09 17:30:48

相關問題