Primary Key

Запросы, планы, оптимизация запросов, ...

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

Ответить
_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Primary Key

Сообщение _so_ » 21 мар 2005, 12:04

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 21 мар 2005, 12:35

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 21 мар 2005, 12:35

Базу новую имел в виду, раз со всеми таблицами такая песня.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 21 мар 2005, 13:51

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

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 21 мар 2005, 14:05

Не одного FK нет.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 21 мар 2005, 14:16

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 мар 2005, 16:58

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

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 21 мар 2005, 17:32

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 мар 2005, 17:51

"хитрым образом" не получится. 5 гиг - это не бог весть что. при нормальном сервере максимум полчаса на пересоздание всех индексов.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 21 мар 2005, 18:17

Ок. Спасибо.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 16 июн 2005, 11:27

Блин накололся имя констрайнта не есть имя индекса.
ALTER TABLE DOCPRIMARY DROP CONSTRAINT INTEG_108;

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 июн 2005, 11:37

Создается индекс с именем RDB$Primary###
везде кроме Firebird 1.5. Там если имя constraint задано, то имя индекса используется то же самое.

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

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 16 июн 2005, 14:43

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

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

Ответить