Thread: Help with foreign key creation problem
I need some help understanding and creating foreign keys in postgresql. Here is an example of what I am trying to do: I have table 1 with: table1_id serial unique table1_col1 varchar I have table2 with: table2_id serial unique table1_id integer table2_col1 varchar When I try to create the foreign key with alter table "schema_name"."table1" add foreign key ("table1_id") references "schema_name"."table2"("table1_id") on delete cascade on update cascade not deferrable; Postgres complains with: ERROR: UNIQUE constraint matching given keys for referenced table "table2" not found. Why is postgresql demanding a unique key on table2.table1_id? It is a foreign key in a parent/child 1 to many relationship. Please help me understand what is going on, and what I am missunderstanding about foreign keys. Thanks chris Postgresql 7.3.4 on RH ES 2.1
On Thu, 13 May 2004, CHRIS HOOVER wrote: > I need some help understanding and creating foreign keys in postgresql. > > Here is an example of what I am trying to do: > > I have table 1 with: > table1_id serial unique > table1_col1 varchar > > I have table2 with: > table2_id serial unique > table1_id integer > table2_col1 varchar > > When I try to create the foreign key with > alter table "schema_name"."table1" > add foreign key ("table1_id") > references "schema_name"."table2"("table1_id") > on delete cascade > on update cascade > not deferrable; > > Postgres complains with: > ERROR: UNIQUE constraint matching given keys for referenced table "table2" not > found. > > Why is postgresql demanding a unique key on table2.table1_id? It is a foreign > key in a parent/child 1 to many relationship. > > Please help me understand what is going on, and what I am missunderstanding > about foreign keys. Only slightly, you're creating the wrong way around. You want to be adding the foreign keep to table2. -- Sam Barnett-Cormack Software Developer | Student of Physics & Maths UK Mirror Service (http://www.mirror.ac.uk) | Lancaster University
You are absolutely right. I hate it when I get turned around. Thank you very much for the assistance. Chris ------------------( Forwarded letter 1 follows )--------------------- Date: Thu, 13 May 2004 07:57:38 -0700 (PDT) To: chris.hoover Cc: pgsql-admin@postgresql.org.comp From: Stephan.Szabo[sszabo]@megazone.bigpanda.com.comp Subject: Re: [ADMIN] Help with foreign key creation problem On Thu, 13 May 2004, CHRIS HOOVER wrote: > I need some help understanding and creating foreign keys in postgresql. > > Here is an example of what I am trying to do: > > I have table 1 with: > table1_id serial unique > table1_col1 varchar > > I have table2 with: > table2_id serial unique > table1_id integer > table2_col1 varchar > > When I try to create the foreign key with > alter table "schema_name"."table1" > add foreign key ("table1_id") > references "schema_name"."table2"("table1_id") > on delete cascade > on update cascade > not deferrable; > > Postgres complains with: > ERROR: UNIQUE constraint matching given keys for referenced table "table2" not > found. > > Why is postgresql demanding a unique key on table2.table1_id? It is a foreign > key in a parent/child 1 to many relationship. Are you sure you're making the key the direction you want? I would think you'd want a foreign key on table2(table1_id) referencing table1(table1_id) not the other way around since presumably table1 is the table with the authoratative list of table1_ids.