Inheritance is completely broken [was: Re: Creating foreign key constraint to child table?]
От | Allan Engelhardt |
---|---|
Тема | Inheritance is completely broken [was: Re: Creating foreign key constraint to child table?] |
Дата | |
Msg-id | 3B6DBFAD.CF65A1C5@cybaea.com обсуждение исходный текст |
Ответ на | Re: Creating foreign key constraint to child table? (Stephan Szabo <sszabo@megazone23.bigpanda.com>) |
Список | 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 uniqueindex 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 theSELECT 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=#
В списке pgsql-sql по дате отправления: