Удаление внешнего ключа

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Удаление внешнего ключа

Сообщение ess » 19 апр 2007, 07:28

Hello!


При попытке удаления FK у таблицы вываливается исключение (FB 2.0.1.12855):

/*******************************************************************************
The next statement causes the following error:

This operation is not defined for system tables.
unsuccessful metadata update.
cannot delete.
INDEX FK_ORG_OBJECT_TP.
there are 7 dependencies.
*******************************************************************************/
ALTER TABLE ORG_OBJECT DROP CONSTRAINT FK_ORG_OBJECT_TP;

Подскажите, как можно отследить эти 7 зависимостей ?

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 19 апр 2007, 08:32

Легче взять IBExpert и посмотреть там зависимости.
Чуть труднее самому написать запрос из системных таблиц.

ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Сообщение ess » 19 апр 2007, 10:15

Да, но IBExpert не показывает зависимости FK

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 19 апр 2007, 10:21

Становишься в зависимостях на таблицу и смотришь таблицы, зависящие от неё. В тех, которых ссылки на поле с твоим FK - оно и есть.

ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Сообщение ess » 19 апр 2007, 10:27

Нашел.
FK не удалялся из-за того, что не мог удалиться индекс, используемый в собственных планах запросов.

Тогда вопрос: как можно удалить FK не удаляя индекс (если это вообще возможно)?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 19 апр 2007, 11:57

Индекс внешнего ключа нельзя удалить, так как необходим внешнему ключу. Дропай FK. А при необходимости создашь для этого столбца просто индекс.

ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Сообщение ess » 19 апр 2007, 12:43

CyberMax писал(а):Индекс внешнего ключа нельзя удалить, так как необходим внешнему ключу. Дропай FK. А при необходимости создашь для этого столбца просто индекс.
индекс как раз мне и надо оставить, а вот FK удалить!

ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Сообщение ess » 19 апр 2007, 12:53

Поясню:
я делаю скрипт, который в последствии должен отработать на рабочей базе, и индекс, созданный по FK, будет in use. Индекс прописан в планах (в SP).

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 апр 2007, 13:13

Шо тут непонятного ? Пересоздавай свои СП также

ess
Сообщения: 21
Зарегистрирован: 26 июл 2006, 10:51

Сообщение ess » 19 апр 2007, 13:16

hvlad писал(а):Шо тут непонятного ? Пересоздавай свои СП также
с SP проблем нет, пересоздам.

Но на рабоче базе будут трудности с удалением индекса, он постоянно in use.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 19 апр 2007, 15:07

ess писал(а):Но на рабоче базе будут трудности с удалением индекса, он постоянно in use.
Не меняй метаданные на ходу на рабочей базе. Можешь огрести проблем куда как серьёзнее чем object in use...

Ответить