Re: Creating foreign key constraint to child table?

From: "Dmitry G(dot) Mastrukov" Дмитрий Геннадьевич Мастрюков <dmitry(at)taurussoft(dot)org>
To: Allan Engelhardt <allane(at)cybaea(dot)com>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: Creating foreign key constraint to child table?
Date: 2001-08-05 21:28:02
Message-ID: 997046882.2058.14.camel@flame-in-night
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Peter Eisentraut 2001-08-05 21:41:18 Re: Date Time Functions - ANSI SQL ?
Previous Message Allan Engelhardt 2001-08-05 19:55:48 Re: Creating foreign key constraint to child table?