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