Postgres, foreign key to parent(in inheritance mean) table:imposible?

Ситуация следующая: есть общая таблица для всех видов документов:

create table document(<br/>
id bigserial,<br/>
title text,<br/>
prinary key(id)<br/>
);



От нее есть наследованная таблица с доп. полями вида

create table purchase_request(<br/>
...<br/>
primary key()id<br/>
)<br/>
inherits(document)<br/>



К каждому документу привязана таблица товаров вида:

create table document_items(<br/>
document_id bigint references document(id),<br/>
item_id bigint references items(id),<br/>
)



Так вот, если я создаю запись вначале в таблицу document, потом в document_items — все нормально


Но когда я создал запись в таблице purchase_request, а потом хочу добавить запись в document_items — он кричит что такого ключа не существует.


В чём может быть причина?

Ответ в данной ситуации оказался прост: решить сейчас данную проблему невозможно. Inheritance Caveats
  • Вопрос задан
  • 3777 просмотров
Пригласить эксперта
Ответы на вопрос 4
taliban
@taliban
php программист
Я скажу ща за mysql но думаю причина в том же: Когда вставляете запись, и форенкей есть, то по сути получается одна таблица ведущая, другая ведомая. Тоесть чтоб вставить запись в ведомую таблицу, в ведущей уже должна быть запись с таким ключем (это грубо говоря). Либо при создании внешнего ключа уберите действия и разрешите нул как значение у поля. Сумбурно конечно, но как-то так оно и получается =)
Ответ написан
ZiNTeR
@ZiNTeR Автор вопроса
Оказалось что ответ на данный вопрос есть в инструкции для Postgres. Дословно: There is no good workaround for this case.

www.postgresql.org/docs/9.1/static/ddl-inherit.html
Ответ написан
vajadhava
@vajadhava
Триггеры наше все :) Проверяйте целостность вручную.
Ответ написан
@ztxn
Спасибо за этот вопрос. Не знал об этой плюшке PG.

Печально, что caveats сужают область ее применения до ничтожно узкой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы