Обсуждение: Foreign keys: referencing a REFERENCES doesn7t work?
I have the following schema: create table PRODUCTS ( id char(12) primary key ); create table MOVIES ( id char(12) references PRODUCTS, volume_id int2 not null default 1, label_id integer references LABELS(id), length int2 not null, primary key (id, volume_id) ); create table MOVIE_SERIES ( id serial primary key, title text not null, title_kana text not null ); create table REL_MOVIES_SERIES ( prod_id char(12) references MOVIES(id), series_id integer references MOVIE_SERIES(id), primary key (prod_id, series_id) ); When trying to enter this SQL I get the following error: ERROR: UNIQUE constraint matching given keys for referenced table "movies" not found Seems that pgsql is fine when MOVIES.id references PRODUCTS.id for a foreign key but if a table references MOVIES.prod_id for a foreign key pgsql cannot go up the reference "tree" and follow what MOVIES.id references to see that there really is a unique constraint ... hence I get an error. Am I missing something or is this a problem with pgsql? Jc
* Jean-Christian Imbeault wrote on Monday, 2002-08-05:
[I edited out the unnecessary fields]
> create table PRODUCTS (
> id char(12) primary key
> );
>
> create table MOVIES (
> id char(12) references PRODUCTS,
> volume_id int2 not null default 1,
> primary key (id, volume_id)
> );
>
> create table MOVIE_SERIES (
> id serial primary key
> );
>
> create table REL_MOVIES_SERIES (
> prod_id char(12) references MOVIES(id),
> series_id integer references MOVIE_SERIES(id),
> primary key (prod_id, series_id)
> );
>
> When trying to enter this SQL I get the following error:
>
> ERROR: UNIQUE constraint matching given keys for referenced table
> "movies" not found
>
> Seems that pgsql is fine when MOVIES.id references PRODUCTS.id for a
> foreign key but if a table references MOVIES.prod_id for a foreign key
^^^^^^
REL_MOVIES_SERIES?
> pgsql cannot go up the reference "tree" and follow what MOVIES.id
> references to see that there really is a unique constraint ... hence I
> get an error.
There is _no_ unique constraint on MOVIES.id since it is not declared
UNIQUE and is part of a composite primary key.
--
Christian Ullrich Registrierter Linux-User #125183
"Deliver."
Jean-Christian Imbeault <jc@mega-bucks.co.jp> writes:
> Seems that pgsql is fine when MOVIES.id references PRODUCTS.id for a
> foreign key but if a table references MOVIES.prod_id for a foreign key
> pgsql cannot go up the reference "tree" and follow what MOVIES.id
> references to see that there really is a unique constraint ...
No, there isn't a unique constraint. Your REFERENCES clause says that
every ID in MOVIES must equal some ID in PRODUCTS; it does *not* say
that two different rows in MOVIES can't reference the same ID in
PRODUCTS. Add a UNIQUE constraint to MOVIES if that's the behavior you
want.
regards, tom lane