Выполняю перевод баз с 2.0 на 2.1
При выполнении
select * from rdb$fix_metadata('WIN1251');
Ошибочка:
RDB$TRIGGERS
RDB$TRIGGER_SOURCE
CHECK_15
<null>
Statement failed, SQLCODE = 100
attempted retrieval of more segments than exist
-action cancelled by trigger (1) to preserve data integrity
-Cannot update trigger used by a CHECK Constraint
-At procedure 'RDB$FIX_METADATA'
Открыл исходный вариант базы, оказалась, что CHECK_15, это триггер
созданный на основе ограничения CHK_LAND_RIGHTS_BUS_PARTS
Возникает ряд вопросов:
1) С какого перепуга скрипт вообще дёргает этот триггер?
2) Откуда там может быть ошибка - вроде букав русских нет и синтаксис
корректный.
3) Что делать дальше? :-)
Вот запись из RDB$TRIGGERS
INSERT INTO RDB$TRIGGERS (
RDB$TRIGGER_NAME, RDB$RELATION_NAME, RDB$TRIGGER_SEQUENCE,
RDB$TRIGGER_TYPE, RDB$TRIGGER_SOURCE, RDB$TRIGGER_BLR, RDB$DESCRIPTION,
RDB$TRIGGER_INACTIVE, RDB$SYSTEM_FLAG, RDB$FLAGS
) VALUES (
'CHECK_15', 'LAND_RIGHTS_BUS', 0, 1, NULL, NULL, NULL, 0, 3, 1
);
Ограничение создавалось в составе скрипта обновления базы (сервер 2.0.4):
create domain D_PARTS as INTEGER CHECK (value > 0);
alter table LAND_RIGHTS_BUS add PART_DIVIDEND D_PARTS;
alter table LAND_RIGHTS_BUS add PART_DIVISOR D_PARTS;
ALTER TABLE LAND_RIGHTS_BUS ADD CONSTRAINT CHK_LAND_RIGHTS_BUS_PARTS
check (PART_DIVIDEND <= PART_DIVISOR);
for i, fld in enumerate(table.fields):
alter table LAND_RIGHTS_BUS alter fld position i
comment on domain D_PARTS is '...';
comment on column LAND_RIGHTS_BUS.PART_DIVIDEND is '';
comment on column LAND_RIGHTS_BUS.PART_DIVISOR is '';
commit;
--
Александр Замараев