我正在使用Django ORM访问PostgreSQL数据库,在罕见的情况下,Django会抛出像django.db.utils.DatabaseError: invalid page header in block 299560 of relation base/83966/84778
这样的DatabaseError。
我研究了这个,似乎是因为数据库以某种方式被破坏了。这非常令人沮丧,因为我在重新启动时总是干净地关闭数据库,并且我可以在磁盘驱动器上运行的每一项检查都说磁盘本身没有任何问题。因此,我只能得出结论,PostgreSQL实际上并不符合ACID,并且在极少数情况下会破坏我的数据。
我能找到的唯一解决方法是删除并重新创建我的数据库。显然,这不是一个真正的修复,因为我丢失了所有数据。有没有其他方法可以解决这个问题,还是应该切换到像MySQL这样更可靠的数据库?
我在Ubuntu 10.04上运行Postgresql-8.4.8。
答案 0 :(得分:1)
大多数情况下,当你看到这个时,你的内存不好或驱动器坏了。 PostgreSQL和MySQL之间的区别在于PostgreSQL看到它并且应该抱怨它,而MySQL经常只是继续前进而没有停止。我认为当机器损坏数据存储时停止的数据库是更可靠的数据库,因为它可以让你直接知道你的系统存在问题。
顺便说一下,只要硬盘驱动器没有说谎fsync,PostgreSQL可以在紧急关机(从机器背面拉出插头)中幸存下来。尝试memtest86,看看你的记忆是否正常,并做一些像
这样的事情sudo dd if = / dev / sdc1 of = / dev / null
看看你是否有任何错误。您的dmesg或消息日志中有关驱动器读写错误的任何内容?