Re: Creating foreign key constraint to child table?

Поиск
Список
Период
Сортировка
От Dmitry G. Mastrukov" Дмитрий Геннадьевич Мастрюков
Тема Re: Creating foreign key constraint to child table?
Дата
Msg-id 997046882.2058.14.camel@flame-in-night
обсуждение исходный текст
Ответ на Creating foreign key constraint to child table?  (Allan Engelhardt <allane@cybaea.com>)
Список pgsql-sql
05 Aug 2001 13:49:22 +0100, Allan Engelhardt ____
> I would like to create a FOREIGN KEY constraint to an inherited column, like:
> 
>     test=# CREATE TABLE foo(id INTEGER PRIMARY KEY);
>     test=# CREATE TABLE bar() INHERITS (foo);
>     test=# CREATE TABLE baz (bar INTEGER, CONSTRAINT fk_bar FOREIGN KEY (bar) REFERENCES bar(id));
>     ERROR:  UNIQUE constraint matching given keys for referenced table "bar" not found
> 
> This obvioulsy doesn't work.  I *can* create a FOREIGN KEY contraint to the parent table:
> 
>     test=# create table baz(bar integer, constraint fk_bar foreign key (bar) references foo(id));
>     NOTICE:  CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
>     CREATE
> 
> but this is not exactly what I want: I need to ensure that baz.bar is a bar and not just any foo.
> 
> Do I need to write my own INSERT/UPDATE triggers on baz to check the tableoid, or is there a nice way to do this?
> 
> Any examples on how to do this?  In particular, do I need to do a SELECT on pg_class for every INSERT / UPDATE in
baz,just to get the tableoid for bar ?  There *is* an index on pg_class.relname but still...
 
> 
Now child table does not inherit constraints from parent. More of that,
you can violate primary key in parent by inserting duplicate id in
child. So inheritance is broken in current version. You should develop
scheme without inheritance.

Regards,
Dmitry



В списке pgsql-sql по дате отправления:

Предыдущее
От: Allan Engelhardt
Дата:
Сообщение: Re: Creating foreign key constraint to child table?
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: Date Time Functions - ANSI SQL ?