powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / dbschema (drop index->create index)
9 сообщений из 9, страница 1 из 1
dbschema (drop index->create index)
    #32775417
ladyirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

вопрос по поводу создания-удаления индексов в базе.
собственно, это нужно сделать.
для это я формирую скрипт drop index... create index...
существующие индексы получаются с помощью утилиты dbschema.

Возникает ощущение, что не все индексы она вытаскивает.

Например, есть таблица (то,что показывает eSQLEditor):

====================================================
DROP TABLE "informix".region_maps;

CREATE TABLE "informix".region_maps(
firegion_map_id SERIAL NOT NULL,
fsregion_map_nm VARCHAR(64) NOT NULL)
EXTENT SIZE 16 NEXT SIZE 16 LOCK MODE PAGE;

CREATE UNIQUE INDEX "informix".151_1130 ON "informix".region_maps(firegion_map_id);

ALTER TABLE "informix".region_maps ADD CONSTRAINT PRIMARY KEY
(firegion_map_id) CONSTRAINT "informix".ct_region_maps2;
====================================================

в таблице sysindexes тоже есть запись об этом индексе, где idxname="151_1130".

Однако, dbschema -d dbname -t region_maps file

дает только такую информацию:
====================================================
create table region_maps
(
firegion_map_id serial not null ,
fsregion_map_nm varchar(64) not null ,
primary key (firegion_map_id) constraint ct_region_maps2
) extent size 16 next size 16 lock mode page;

====================================================

И никакого упоминания об индексах....

А надо восстановить поломаные индексы по всей базе.
Собственно вопрос:
что это за специальные индексы, которые не отлавливает dbschema,
и как их получить, раз они-таки нужны.
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32775454
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ladyirinaЗдравствуйте,

вопрос по поводу создания-удаления индексов в базе.
собственно, это нужно сделать.
для это я формирую скрипт drop index... create index...
существующие индексы получаются с помощью утилиты dbschema.

Возникает ощущение, что не все индексы она вытаскивает.

Например, есть таблица (то,что показывает eSQLEditor):

====================================================
DROP TABLE "informix".region_maps;

CREATE TABLE "informix".region_maps(
firegion_map_id SERIAL NOT NULL,
fsregion_map_nm VARCHAR(64) NOT NULL)
EXTENT SIZE 16 NEXT SIZE 16 LOCK MODE PAGE;

CREATE UNIQUE INDEX "informix".151_1130 ON "informix".region_maps(firegion_map_id);

ALTER TABLE "informix".region_maps ADD CONSTRAINT PRIMARY KEY
(firegion_map_id) CONSTRAINT "informix".ct_region_maps2;
====================================================

в таблице sysindexes тоже есть запись об этом индексе, где idxname="151_1130".



Ошибка в eSQLEditor, там дофига чего неправильно в DDL показывается (все таки надо было написать что это тест - дурень я).

" 151_1130" - это автоиндекс для primary key (firegion_map_id) constraint ct_region_maps2

dbschema все правильно показывает.
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32775465
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ladyirina
А надо восстановить поломаные индексы по всей базе.
Собственно вопрос:
что это за специальные индексы, которые не отлавливает dbschema,
и как их получить, раз они-таки нужны.

А почему их надо пересоздать? Откуда известно что они "поломаные"?
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32775736
ladyirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисОшибка в eSQLEditor, там дофига чего неправильно в DDL показывается (все таки надо было написать что это тест - дурень я).

" 151_1130" - это автоиндекс для primary key (firegion_map_id) constraint ct_region_maps2

dbschema все правильно показывает.

автоиндекс?
то есть при пересоздании индексов его ручками пересоздавать не надо?
а на каком этапе автоиндексы создаются?

пересоздавать индексы надо по следующей причине: попытка сделать бэекап нулевого уровня на все базы сервера
выдает ISAM error. Попытки запустить oncheck -cI тормозить начинает на одной таблице. Ожидание 40 минут,
потом процесс прервали. Или это нормальная ситуация, что так долго?
Ну вопрос, что лучше - дождаться, пока отработает oncheck -cI или удалить/создать индексы?
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32776057
ladyirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по поводу автоиндексов еще вопрос:

есть база.
создали dbshema-ой скрипты drop index/create index,
допустим в файлах cr_indx.sql и dr_indx.sql

потом, пока база находится в онлайне,
запускаем

dbaccess dbname < cr_indx.sql;

на этом этапе индексы замечательно дропаются.

потом пытаемся запустить

dbaccess dbname < dr_indx.sql;

сервер выдает:
=========================
Database selected.


350: Index already exists on column.
Error in line 2
Near character position 31


Database closed.
=========================


а если помотреть тем же eSQLEditor-ом, то там как раз и видны автоиндексы.
то есть получается, что автоиндесы создались, и как мне теперь создать нормальные индексы?
в какой момент это происходит?


собственно скрипты выглядят так:

cr_indx.sql
================================
create unique index ix_region_maps1 on region_maps
(firegion_map_id) using btree ;

================================

dr_indx.sql
================================
drop index ix_region_maps1;
================================
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32776422
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.н. "автоиндексы" это обычные индексы, которые создаются неявно (без оператора create index ) по полям на которые наложено ограничение например primary key. Зачем создавать еще один индекс на этом же поле ? Вот информикс и не дает это сделать. Естественно в dbscheme эти индексы не показываются, поскольку и так из вышесказанного ясно, что информикс сам создаст индексы по полям с primary key.

create table t1 (
f1 serial primary key,
f2 char)

create unique index idx1_t1 on t1 (f1)

Получаем :
350: Index already exists on column

И теперь вам должно быть понятно, что не стоит создавать индекс по полю, которое затем будете объявлять как primary key (а вы из вашего первого поста, делаете именно так).
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32776589
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В допонение к вышесказанному добавлю, что сервер сам создает индексы для primary key, уникальных и ссылочных ограничений.
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32776989
ladyirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndronТ.н. "автоиндексы" это обычные индексы, которые создаются неявно (без оператора create index ) по полям на которые наложено ограничение например primary key. Зачем создавать еще один индекс на этом же поле ? Вот информикс и не дает это сделать. Естественно в dbscheme эти индексы не показываются, поскольку и так из вышесказанного ясно, что информикс сам создаст индексы по полям с primary key.

create table t1 (
f1 serial primary key,
f2 char)

create unique index idx1_t1 on t1 (f1)

Получаем :
350: Index already exists on column

И теперь вам должно быть понятно, что не стоит создавать индекс по полю, которое затем будете объявлять как primary key (а вы из вашего первого поста, делаете именно так).

http://groups.google.com/groups?q=autoindex+informix&hl=en&lr=&selm=3DADBA86.6020503%40hotmail.com&rnum=5
...
Рейтинг: 0 / 0
dbschema (drop index->create index)
    #32777076
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ladyirinahttp://groups.google.com/groups?q=autoindex+informix&hl=en&lr=&selm=3DADBA86.6020503%40hotmail.com&rnum=5
это про автоиндекс, который строится во время выполнения запроса и потом удаляется

индекс, который создается информиксом для поддерживания констрейнт - обычный постоянный индекс
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / dbschema (drop index->create index)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]