I obviously haven't had enough coffee yet... :-) The following script works as
expected.
drop database test;
create database test;
\c test
create table foo (id integer primary key);
create table bar () inherits (foo);
create unique index bar_id_idx ON bar(id);
create table baz (bar integer,
constraint fk_bar foreign key (bar) references bar(id));
insert into foo values (1);
insert into bar values (2);
insert into baz values (2);
insert into baz values (1); -- fails
Sorry.
--- Allan.
I wrote:
> 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 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]