2016-08-29 662 views
0

最近我在我的linux機器上發生了硬件故障,並修復硬件問題並將我的linux機器恢復後,當我執行查詢我的表,下面的錯誤返回。PostgreSQL無法打開文件「base/xxxx/xxxxx」沒有這樣的文件或目錄

ERROR: could not open file "base/17085/281016": No such file or directory. 

在postgresql/base/17085目錄中選中時,文件281016不存在。

如果我使用下面的命令手動創建文件,問題就解決了嗎?還是在未來造成更多麻煩的壞方法?

#touch 281016 
#chown postgres:postgres 281016 
#chmod 600 281016 

回答

0

簡答:從備份恢復。然後調查你的設置,你正在運行一個不安全的系統。

龍答:

假設你沒有備份,而是需要你學到了寶貴的一課數據庫。請檢查您的備份。

如果這是一個簡單的SELECT * FROM bad_table這是失敗的,那麼它是有問題的表。如果沒有,立即發佈數據,你很幸運,它只是一個被破壞的索引。

然後轉儲所有剩下的表格。

然後執行一些檢查以確保數據在恢復並重新投入生產之前處於正常狀態。

現在 - 在PostgreSQL中禁止錯誤(不太可能),這應該是不可能的。由於我們正在討論丟失的文件,我猜想你的磁盤報告的數據是flushed and synced,實際上並非如此。無論如何請檢查你的postgresql.conf中的fsync設置。

+0

感謝您的回答理查德:) 這是我的測試系統,這裏沒有太多的數據,並同意你從備份恢復將是最好的選擇。 只是想知道如果我們可以手動創建丟失的文件,如果出現這樣的問題,可以影響這樣的程序? –

+0

您可以創建一個空文件,但是您的數據庫已損壞。有時,用零填充損壞的磁盤塊或者同樣擴展文件會很有用。然後,您可以傾倒在受損部位周圍儘可能地恢復。如果不值得花費很多努力,那麼最好從上次備份中恢復並註銷任何更新。 –

相關問題