Я использую унаследованные таблицы в проекте, используя posgresql.Как добавить ограничение внешнего ключа в унаследованной таблице в postgresql?
Нечто подобное:
create table root
(
id bigserial,
some_data text,
...
);
create table leaf_a
(
data2 text
) inherits(root);
create table leaf_b
(
maybe_other_data text
) inherits(root);
Все прекрасно работает до сих пор.
Но недавно я добавил таблицу, которая является отношение один к одному, что при использовании на leaf_a и leaf_b, поэтому я создал так:
create table conf
(
id bigserial,
root_id bigint,
more_data text
);
До сих пор так хорошо, но теперь я хочу создать ограничение:
alter table conf
add constraint plop foreign key (root_id) references root (id);
Postgres позволяет мне создать ограничение.
Так что я добавить данные:
insert into leaf_a (some_data, data2) values ('...', '...');
позволяет сказать, что идентификатор генерируется (идентификатор из корневой таблицы) составляет 42, я хочу сейчас, чтобы добавить данные в таблицу конф:
insert into conf (root_id, more_data) values (42, '...');
И вот в чем проблема, postgres говорит мне, что нет данных с id = 42 в корне таблицы.
Хорошо, так как я могу обойти эту проблему?
Заранее спасибо.
Вы уже читали раздел документации Определение данных/Наследование/Предостережения? В нем упоминаются ограничения в этом сценарии. –
Хорошо, я переключился так, как сделана связь между conf, root и листьями. Теперь я ограничиваю каждую таблицу листьев и корень. –
@ iXô Работает ли это для вас? Если да, не могли бы вы добавить это в качестве ответа и принять его? –