2012-07-20 2 views
1

Кто-нибудь слышал или переживал о следующем явлении?странные данные остаются

Использование PostGreSQL 9.0.5 на Windows,

= структура таблицы =

[родитель] - [ребенок] - [внучат]

я узнал, что запись осталась странно на [ребенка] Таблица. Эта запись существует, нарушая ограничение внешнего ключа.

  • эти таблицы хранить транзакционные данные моего приложения
  • все приведенные выше таблицы имеют числовые PRIMARY KEY
  • все эти таблицы имеют FOREIGN KEY ограничение (между родителем и ребенком, внуком)
  • мое приложение обновляет каждый статус записи вместе с ходом транзакции
  • мое приложение копирует эту запись в архивные таблицы (одна и та же структура, те же ограничения) после изменения статуса на «normal_end».
  • затем удалите эти записи, когда они закончат копировать их в архивные таблицы.

  • статус оставшейся записи на [дочернем] столе был не «normal_end», а «обработка». , но статус скопированных данных (тот же идентификатор) в таблице архива был «normal_end».

  • ошибки не сообщается на сайте pg_log

Я чувствовал, что это очень странно ... я подозреваю, что удаленные данные могут вернулись к активным!? Могут ли удаленные данные быть активными неожиданными?

ответ

1

Не должно быть данных, которые нарушают ограничение внешнего ключа (за исключением транзакции с отложенными ограничениями).

Удаленная строка должна оставаться удаленной после совершения транзакции. Это одно из требований ACID. Однако правильная работа PostgreSQL основана на правильном функционировании вашего оборудования и оборудования. Когда postgresql fsyncs файл, он действительно должен быть записан на диск или в энергонезависимый кеш. К сожалению, иногда случается, что диски или контроллеры сообщают системе, что запись закончилась, пока она не имеет и все еще находится в энергозависимом кеше. Если у вас есть контроллер рейда с ОЗУ, но нет батареи, убедитесь, что кеш контроллеров настроен на запись.

Лично я видел, что PostgreSQL имеет некорректные данные один раз, у него была повторяющаяся строка (тот же первичный ключ), это было после сбоя на компьютере с Windows XP (это скорее всего было 9.0.x). Машины Windows XP не очень надежны для работы postgresql. Они часто дают странные сетевые ошибки.

+0

Большое спасибо за ваши комментарии. – user1534289

+0

Имеет смысл, что это может произойти, если диск или нелетучий кеш нестабильны. Этот Windows2008R2 работает на виртуальной машине. Я не знаю и не могу себе представить, что это может произойти на ВМ ... – user1534289

Смежные вопросы