2011-05-05 30 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

相关问题