有没有人听说或经历过以下现象?
在Windows上使用postgresql 9.0.5
= table structure =
[父母] - [孩子] - [孙子]
我在[儿童]牌桌上发现了一条奇怪的记录。 该记录存在违反外键限制的情况。
然后,在完成将这些记录复制到存档表后删除这些记录。
[child]表上的剩余记录状态不是“normal_end”而是“processing”。 但归档表中复制数据(相同ID)的状态为“normal_end”。
我觉得很奇怪...... 我怀疑删除的数据可能会恢复活跃! 删除的数据可以意外激活吗?
答案 0 :(得分:1)
绝不应该有违反外键约束的数据(除了在具有延迟约束的事务期间)。
提交事务后,删除的行应保持删除状态。这是ACID的要求之一。但是,PostgreSQL的正确工作依赖于操作系统和硬件的正确运行。当postgresql fsyncs文件时,它应该真正写入磁盘或非易失性缓存。不幸的是,有时会发生磁盘或控制器告诉系统写入已经完成但没有并且仍处于易失性缓存中。如果你有一个带RAM但没有电池的raid控制器,请确保控制器缓存设置为直写。
就我个人而言,我曾经看过PostgreSQL有一次不正确的数据,它有一个重复的行(相同的主键)这是在Windows XP机器崩溃后(这很可能是9.0.x)。运行postgresql的Windows XP机器不是很可靠。它们经常会出现奇怪的网络错误。