Creating foreign key constraint to child table?

From: Allan Engelhardt <allane(at)cybaea(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Creating foreign key constraint to child table?
Date: 2001-08-05 12:49:22
Message-ID: 3B6D40D2.BDF7B876@cybaea.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

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.

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Allan Engelhardt 2001-08-05 13:03:05 Re: Creating foreign key constraint to child table?
Previous Message Allan Engelhardt 2001-08-05 11:04:21 Using functions in SQL statements