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...


    --- Allan.


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

Reply via email to