2012-07-20 91 views
1

有沒有人聽說過或經歷過下列現象?奇怪的數據仍然

在Windows

使用PostgreSQL 9.0.5

=表結構=

[家長] - [兒童] - [孫子]

我發現了一個奇怪的紀錄留在[兒童]表。 此記錄存在違反外鍵的限制。

  • 我的申請,這些表存儲交易數據
  • 上述所有表都具有數字PRIMARY KEY
  • 所有這些表有外鍵約束
  • 我的應用程序更新每個(父母與子女,孫子女之間)記錄狀態以及交易進度
  • 一旦所有狀態變爲「normal_end」,我的應用程序將此記錄複製到歸檔表(相同結構,相同限制) 。
  • 然後,在完成將這些記錄複製到歸檔表格後刪除這些記錄。

  • [子]表上的剩餘記錄狀態不是「normal_end」而是「處理」。 ,但歸檔表中複製數據(相同ID)的狀態爲「normal_end」。

  • 沒有錯誤報道pg_log

我覺得這很奇怪...... 我懷疑是被刪除的數據可能會回來活躍!? 可刪除的數據是否有意外激活?

回答

1

應該永遠不會有違反外鍵約束的數據(除了在具有延遲約束的事務期間)。

一旦事務被提交,刪除的行應該保持刪除狀態。這是ACID的要求之一。然而,PostgreSQL的正確工作依賴於你的操作系統和硬件的正確功能。當postgresql對一個文件進行fsyncs時,它應該被寫入磁盤或非易失性緩存。不幸的是,它有時會發生磁盤或控制器告訴系統寫入已完成,而沒有並且仍處於易失性高速緩存中。如果你有一個帶有RAM但沒有電池的RAID控制器,請確保控制器高速緩存設置爲直寫。

就我個人而言,我看到PostgreSQL有一次錯誤的數據,它有一個重複行(相同的主鍵),這是在Windows XP機器崩潰後(這很可能是9.0.x)。運行postgresql的Windows XP機器不是很可靠。他們經常給出奇怪的網絡錯誤。

+0

非常感謝您的意見。 – user1534289 2012-07-23 03:07:22

+0

如果磁盤或非易失性緩存不穩定,可能會發生這種情況。這個windows2008R2在虛擬機上運行。我不知道也無法想象它可能發生在VM上... – user1534289 2012-07-23 03:14:41