Код: Выделить всё
CREATE TABLE CEVENTS (
CEID INTEGER NOT NULL,
ETID INTEGER,
CEDATE TIMESTAMP DEFAULT Current_Timestamp
);
ALTER TABLE CEVENTS ADD CONSTRAINT FK_CE_ETYPES FOREIGN KEY (ETID) REFERENCES ETYPES (ETID) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE ETYPES (
ETID INTEGER NOT NULL,
ETNAME VARCHAR(100)
);
Код: Выделить всё
ALTER TABLE CEVENTS DROP CONSTRAINT FK_CE_ETYPES
За полем ETID числится индекс RDB$FOREIGN42:This operation is not defined for system tables.
unsuccessful metadata update.
object INDEX is in use .
Код: Выделить всё
alter index RDB$FOREIGN42 inactive
This operation is not defined for system tables.
unsuccessful metadata update.
MODIFY RDB$INDICESS failed.
action cancelled by trigger (3) to preserve data integrity.
Cannot deactivate primary index.
Код: Выделить всё
drop index RDB$FOREIGN42
В зависимостях у поля ETID кроме процедур ничего нет, но поиск по системным таблицам выдаёт триггеры:This operation is not defined for system tables.
unsuccessful metadata update.
ERASE RDB$INDICES failed.
action cancelled by trigger (1) to preserve data integrity.
Cannot delete index used by an Integrity Constraint.
Код: Выделить всё
select RDB$CONSTRAINT_NAME, RDB$TRIGGER_NAME from RDB$CHECK_CONSTRAINTS
where RDB$CONSTRAINT_NAME = 'FK_CE_ETYPES'
Однако, таких триггеров в RDB$TRIGGERS нет:RDB$CONSTRAINT_NAME RDB$TRIGGER_NAME
FK_CE_ETYPES CHECK_47
FK_CE_ETYPES CHECK_48
Код: Выделить всё
DROP TRIGGER CHECK_47
Удалить записи из RDB$CHECK_CONSTRAINTS также не удаётся: защита целостности и всё такое.This operation is not defined for system tables.
unsuccessful metadata update.
Trigger not found.
Т.е. удалить FK нельзя, т.к. к нему привязан индекс, а индекс нельзя трогать, потому что он используется для FK. И ещё эти несуществующие триггеры.. Можно тут что-то сделать, чтобы вычистить всё лишнее из базы?