Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Foreign Key по унаследованной таблице / 1 сообщений из 1, страница 1 из 1
09.09.2008, 21:04
    #35530821
DAISER
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign Key по унаследованной таблице
Может чушь спрашиваю, но тем не менее.

Есть родительская таблица item. Создаю ещё пару таблиц: item_act и item_arch, которые наследуются от item. Одна для актуальных (активных) записей, вторая -- архив. Структуру таблицы не меняем. Архивная таблица создается в другом tablespace. Таблица item записей не имеет.

Код: plaintext
1.
2.
3.
db=# select * from only item;
 id | name | active | pid | isgroup
----+------+--------+-----+---------
(0 rows)

Код: plaintext
1.
2.
3.
4.
5.
db=# select * from item_act;
  id  |  name   | active | pid | isgroup
------+---------+--------+-----+---------
 0101 | Товар 1 | t      |     | f
 0102 | Товар 2 | t      |     | f
(2 rows)

Код: plaintext
1.
2.
3.
db=# select * from item_arch;
 id | name | active | pid | isgroup
----+------+--------+-----+---------
(0 rows)

Код: plaintext
1.
2.
3.
4.
5.
db=# select * from item;
  id  |  name   | active | pid | isgroup
------+---------+--------+-----+---------
 0101 | Товар 1 | t      |     | f
 0102 | Товар 2 | t      |     | f
(2 rows)

Создаем ещё одну таблицу, со ссылкой на item.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "public"."table1" (
  "item" TEXT, 
  CONSTRAINT "table1_fk" FOREIGN KEY ("item")
    REFERENCES "public"."item"("id")
    ON DELETE CASCADE
    ON UPDATE CASCADE
    NOT DEFERRABLE
) WITHOUT OIDS;

Код: plaintext
1.
2.
db=# insert into table1(item) values('0101');
ERROR:  insert or update on table "table1" violates foreign key constraint "table1_fk"
DETAIL:  Key (item)=(0101) is not present in table "item".

Как написать Foreign Key, который просматривал бы ещё и унаследованные таблицы, чтобы при переносе записей в архив не нарушалась целостность базы? В хелпе написано "There is no good workaround for this case". Может кто-то решил такую задачу (кроме написания собственного триггера)? Спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Foreign Key по унаследованной таблице / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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