Discussion:
Help with foreign key creation problem
(too old to reply)
CHRIS HOOVER
2004-05-13 14:34:00 UTC
Permalink
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

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings
Sam Barnett-Cormack
2004-05-13 14:52:04 UTC
Permalink
Post by CHRIS HOOVER
I need some help understanding and creating foreign keys in postgresql.
table1_id serial unique
table1_col1 varchar
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;
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

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to ***@postgresql.org)
CHRIS HOOVER
2004-05-13 15:05:00 UTC
Permalink
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-***@postgresql.org.comp
From: Stephan.Szabo[sszabo]@megazone.bigpanda.com.comp
Subject: Re: [ADMIN] Help with foreign key creation problem
Post by CHRIS HOOVER
I need some help understanding and creating foreign keys in postgresql.
table1_id serial unique
table1_col1 varchar
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;
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.

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly

Loading...