Страница 1 из 1

Primary Key

Добавлено: 21 мар 2005, 12:04
_so_
Может кто-нибудь подскажет можно ли поменять название primary key в уже существующих таблицах? Вариант с копированием и переименованием не подходит, так как нужно практически у всех таблиц и данных очень много.

Добавлено: 21 мар 2005, 12:35
Merlin
Ничо ни пониль. Тебе констрайнт перименовать надо или всё-таки поле? Если первое - alter table drop constraint, alter table add constraint. Соотвественно напрыгаешься сначала с удалением ссылающихся на него FK. А потом с их воссозданием. А если таки поле - нельзя. Может проще создать новую пустую и перекачать данные?

Добавлено: 21 мар 2005, 12:35
Merlin
Базу новую имел в виду, раз со всеми таблицами такая песня.

Добавлено: 21 мар 2005, 13:51
_so_
Есть уже много работающих баз. Будут создовать новые вновь. Необходимо чтобы у них у всех были одинаковые названия первичных ключей (во всех базах). Для новых баз без проблем. Но нужно как-то поменять уже в существующих.

Добавлено: 21 мар 2005, 14:05
_so_
Не одного FK нет.

Добавлено: 21 мар 2005, 14:16
_so_
Спасибо. Я понял. А можно по быстрее (Без alter table drop constraint, alter table add)?
Некоторые таблицы огромные. Останавливать базы у заказчика на долго не хочется?

Добавлено: 21 мар 2005, 16:58
kdv
alter table add constraint будет "долго" только в смысле создания индекса по ПК. так что, по идее слишком долго не должно. Но все зависит от понятия "огромная таблица" и от хилости винчестера на сервере (и возможно настроек temp).

Добавлено: 21 мар 2005, 17:32
_so_
Да это я понимаю. Не хотелось бы перестраивать индексы. Есть базы по 5Гб. Может можно каким-нибудь хитрым оброзом.

Добавлено: 21 мар 2005, 17:51
kdv
"хитрым образом" не получится. 5 гиг - это не бог весть что. при нормальном сервере максимум полчаса на пересоздание всех индексов.

Добавлено: 21 мар 2005, 18:17
_so_
Ок. Спасибо.

Добавлено: 16 июн 2005, 11:27
_so_
Блин накололся имя констрайнта не есть имя индекса.
ALTER TABLE DOCPRIMARY DROP CONSTRAINT INTEG_108;

alter table DOCPRIMARY add constraint OEPK_40022 primary key (ID);
Создается индекс с именем RDB$Primary###

Это не подходит. Может получится что имя индекса разное во всех базах. И использовать первичные индексы в планах получается нельзя (при статическом формировании запроса). Динамически самому как-то не хочется.
Может все-таки как-нибудь можно задать имя первичного индекса?

Добавлено: 16 июн 2005, 11:37
kdv
Создается индекс с именем RDB$Primary###
везде кроме Firebird 1.5. Там если имя constraint задано, то имя индекса используется то же самое.

И вообще, не надо планы руками писать, ну не надо.

Добавлено: 16 июн 2005, 14:43
_so_
И вообще, не надо планы руками писать, ну не надо.
Тогда уж надо запретить вообще.

В принципе я сам почти согласен с этим.
Почти всегда можно обмануть построитель плана и направить его в нужное русло.