FB 1.5 Проблемы с FOREIGN KEY

andy-r
Дата: 15.06.2012 13:48:29
Здравствуйте, коллеги!

Есть таблица накладных, которая ссылается на договор. Ссылка защищена констрейнтом FOREIGN KEY.
Есть необходимость перебросить накладные со старого договора на новый, а старый удалить.
В процедуре пишу
update nakl set id_dog = :id_new where id_dog = :id_old;
delete from dogovor where id = :id_old;

На втором операторе выскакивает violation of foreign key constraint. Хотя реальных ссылок на удаляемую запись нет. (Я пробовал после update вставить select count(*) from nakl where id_dog=:id_old into cnt. cnt, конечно же = 0).

Возможно, это потому, что транзакция не подтверждена? Ладно, отложим удаление...

update nakl set id_dog = :id_new where id_dog = :id_old;
update dogovor set fl_deleted=1 where id = :id_old;

Проходит. Но запись эту я не могу удалить даже после перезапуска базы. Та же voilation при отсутствии ссылок на удаляемую запись.
Отсюда два вопроса:
- академический: что это за хрень и почему?
- практический: что можно сделать? Есть ли процедуры починки задурившего констрейнта?

Констрейнт простой, никаких действий :
ALTER TABLE NAKL ADD CONSTRAINT FK_NAKL_DOGOVOR FOREIGN KEY (ID_DOG) REFERENCES DOGOVOR (ID);
Мимопроходящий
Дата: 15.06.2012 15:12:17

Hello, andy-r!
You wrote on 15 июня 2012 г. 15:10:05:

andy-r
что это за хрень и почему?
вероятно битый индекс.
andy-r
что можно сделать? Есть ли процедуры починки задурившего
> констрейнта?
зашатдаунить базу.
проверить базу.
убить и создать констрейнт заново.
поднять базу в онлайн.

и вообще, не мешает заглядывать почаще в лог.

Posted via ActualForum NNTP Server 1.5

andy-r
Дата: 15.06.2012 15:54:05
Действительно, куча страниц is an orphan.

Спасибо за помощь!

Пролечил. Помогло. Все записи, которые не мог удалить до лечения, удалились. НО!

Выполнил процедуру переброса накладных между договорами. "Новая" запись со старым договором опять не удаляется.

Получается, такая процедура портит констрейнт? Непонятно...
Dimitry Sibiryakov
Дата: 15.06.2012 15:57:53

andy-r
Получается, такая процедура портит констрейнт?

Ничего она не портит. Это особенность окаменелого FB1.5.

Posted via ActualForum NNTP Server 1.5