From: | Allan Engelhardt <allane(at)cybaea(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Inheritance is completely broken [was: Re: Creating foreign key constraint to child table?] |
Date: | 2001-08-05 21:50:37 |
Message-ID: | 3B6DBFAD.CF65A1C5@cybaea.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Dimitri pointed out (the post does not seem to have appered yet) that you can also do:
test=# create table foo(id integer primary key);
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'foo_pkey' for table 'foo'
CREATE
test=# create table bar () inherits (foo);
CREATE
test=# insert into foo values (1);
INSERT 12734236 1
test=# insert into foo values (1);
ERROR: Cannot insert a duplicate key into unique index foo_pkey
test=# insert into bar values (1);
INSERT 12734238 1
test=# select * from foo;
id
----
1
1
(2 rows)
So inheritance does seem to be completely broken. There is also an entry in the TODO list
Allow inherited tables to inherit index, UNIQUE constraint, and primary key, foreign key [inheritance]
which seems to be related. It doesn't have a dash, so I guess I won't hold my breath....
Now I'm sad.
Allan.
Allan Engelhardt wrote:
> Stephan Szabo wrote:
>
> > On Sun, 5 Aug 2001, Allan Engelhardt wrote:
>
> [see new example below]
>
> > Not that this is related to what you asked about precisely (I saw the
> > response you made), but the query above also doesn't do what you think
> > it does right now. It currently makes a reference to only foo, not
> > any subchildren of foo.
>
> Oh, man! You are right, but this sux big time: there should not be an asymmetry between a FOREIGN KEY constraint and the SELECT statement. Now that the default is SQL_INHERITANCE ON, it should be the default for the constraint as well, IMHO.
>
> 1. Am I the only one who thinks this is a bug?
>
> 2. How would I get the behaviour I expect? Write my own trigger? :-P
>
> --- Allan.
>
> 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 foo(id));
> test=# insert into foo values (1);
> test=# insert into bar values (2);
> test=# insert into baz values (2);
> ERROR: fk_bar referential integrity violation - key referenced from baz not found in foo
> test=# select * from foo where id = 2;
> id
> ----
> 2
> (1 row)
>
> test=#
From | Date | Subject | |
---|---|---|---|
Next Message | Josh Berkus | 2001-08-05 22:05:46 | Data type confusion |
Previous Message | Peter Eisentraut | 2001-08-05 21:47:29 | Re: Fuzzy matching? |