Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / задание 2-х связей с каскадным обновлением между одной парой таблиц / 4 сообщений из 4, страница 1 из 1
08.08.2003, 14:24
    #32231213
Пупкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание 2-х связей с каскадным обновлением между одной парой таблиц
Правильно ли я понимаю, что задание 2-х связей с каскадным обновлением между одной парой таблиц порождает проблему?

я задавал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ALTER TABLE orbase
ADD CONSTRAINT company_orbase
FOREIGN KEY ( "company" )
REFERENCES  "company"   ( "id" ) 
 ON DELETE CASCADE
 ON UPDATE CASCADE
; 
ALTER TABLE orbase
ADD CONSTRAINT company_cid
FOREIGN KEY ( "cid" )
REFERENCES  "company"   ( "id" ) 
 ON DELETE SET NULL
 ON UPDATE CASCADE
;  

при отсутствии связанных значений в поле cid, каскад проходит нормально, при наличии (изменяемого значения) - ошибка (по ODBC):

Код: plaintext
ERROR: company_orbas referential integrity violation - key referenced from orbase not found in company


Что делать? ?Вручную перебить порожденные тригеры в 1? А что буит с его именем?

например породилось:

CREATE CONSTRAINT TRIGGER "company_orbas" AFTER INSERT OR UPDATE ON "orbase" NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins" ('company_orbas', 'orbase', 'company', 'UNSPECIFIED', 'company', 'id');

CREATE CONSTRAINT TRIGGER "company_cid" AFTER INSERT OR UPDATE ON "orbase" NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins" ('company_cid', 'orbase', 'company', 'UNSPECIFIED', 'cid', 'id');

?сделать что-то наподобие:

CREATE CONSTRAINT TRIGGER "company_orbas" AFTER INSERT OR UPDATE ON "orbase" NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins" ('company_orbas', 'orbase', 'company', 'UNSPECIFIED', 'company', 'id')
"трам-пам-пам"
"RI_FKey_check_ins" ('company_cid', 'orbase', 'company', 'UNSPECIFIED', 'cid', 'id');

и что вставлять вместо "трам-пам-пам"?

ЗЫ: звиняйте - я прав (owner-а) не имею на "company", приходится просить (по телефону) запускать скрипт, посему если кто сталкивался - не сочтите за наглость. не то бы сам покурочил.
...
Рейтинг: 0 / 0
08.08.2003, 15:41
    #32231373
Пупкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание 2-х связей с каскадным обновлением между одной парой таблиц
г-да, что делать, если 2 поля в таблице должны каскадно зависеть от значения в другой?

Проблема: создаю 2 FKey, - если поля в подчиненной таблице не совпадают внутри записей, триггеры отрабатывают как и положено. Если оба поля совпадают с изменяемым первичным в мастер-таблице - ошибка. (см пред. пост). Учу мат часть, но пока не нашел.
...
Рейтинг: 0 / 0
08.08.2003, 19:59
    #32231664
Пупкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание 2-х связей с каскадным обновлением между одной парой таблиц
нет, я понимаю, что каскад, это не есть хорошо, но бывают ситуации, когда, пусть редко, но нужно менять значение ключа, а связаны с ним более чем одно поле в записи (например запись - акт с фиксированным количеством участников/ролей, мастер - таблица участников, подчиненная - таблица актов). И что, никто не сталкивался с такой задачей?

- Вспомошествуйте! - "Сами то мы не местные" (с)
...
Рейтинг: 0 / 0
04.11.2003, 10:55
    #32314460
Пупкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание 2-х связей с каскадным обновлением между одной парой таблиц
Проверил на 7.3.

На 7.3. проблемы ни с обновлением, ни с удалением каскада одновременно по 2м ключам, похоже не возникает.
CONSTRAINT TRIGGER-а не видны в ПгАдмине. Но, видимо, того же вида.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / задание 2-х связей с каскадным обновлением между одной парой таблиц / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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