Thread: FOREIGN KEY errors.

FOREIGN KEY errors.

From
Joseph Shraibman
Date:
When trying to alter a table and add a foreign key, I am getting this
error if the table has any data in it:

playpen=# alter table message add FOREIGN KEY (pod,originator)
REFERENCES usertable (podkey,userkey);
NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
for FOREIGN KEY check(s)
ERROR:  constraint <unnamed>: table usertable does not have an attribute
originator

If I do the alter before I put any data in the table:

playpen=#  alter table message add FOREIGN KEY (pod,originator)
REFERENCES usertable (podkey,userkey);
NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
for FOREIGN KEY check(s)
CREATE

playpen=# select version();                              version                               
---------------------------------------------------------------------PostgreSQL 7.0.3 on i686-pc-linux-gnu, compiled by
gccegcs-2.91.66
 
(1 row)

Reversing the order creates a different message:
playpen=# alter table message add FOREIGN KEY (originator,pod)
REFERENCES usertable (userkey,podkey);
NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
for FOREIGN KEY check(s)
ERROR:  constraint <unnamed>: table usertable does not have an attribute
pod


Am I just misunderstanding how to use FOREIGN KEY?  Then why would it
work one time and not the other?

http://www.postgresql.org/docs/aw_pgsql_book/node159.html doesn't have
any column names after 'refrences <tablename>'.


-- 
Joseph Shraibman
jks@selectacast.net
Increase signal to noise ratio.  http://www.targabot.com


Re: FOREIGN KEY errors.

From
Stephan Szabo
Date:
There was a bug (which should be fixed for 7.1) that got the 
arguments wrong for the alter time check of the existing data.
I think I should be able to get a patch together to fix it once
I get a copy of the 7.0.3 source.

Can you send the table schema as well so I can test it out?

Stephan Szabo
sszabo@bigpanda.com

On Thu, 7 Dec 2000, Joseph Shraibman wrote:

> When trying to alter a table and add a foreign key, I am getting this
> error if the table has any data in it:
> 
> playpen=# alter table message add FOREIGN KEY (pod,originator)
> REFERENCES usertable (podkey,userkey);
> NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
> for FOREIGN KEY check(s)
> ERROR:  constraint <unnamed>: table usertable does not have an attribute
> originator
> 
> If I do the alter before I put any data in the table:
> 
> playpen=#  alter table message add FOREIGN KEY (pod,originator)
> REFERENCES usertable (podkey,userkey);
> NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
> for FOREIGN KEY check(s)
> CREATE
> 
> playpen=# select version();
>                                version                               
> ---------------------------------------------------------------------
>  PostgreSQL 7.0.3 on i686-pc-linux-gnu, compiled by gcc egcs-2.91.66
> (1 row)
> 
> Reversing the order creates a different message:
> playpen=# alter table message add FOREIGN KEY (originator,pod)
> REFERENCES usertable (userkey,podkey);
> NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s)
> for FOREIGN KEY check(s)
> ERROR:  constraint <unnamed>: table usertable does not have an attribute
> pod
> 
> 
> Am I just misunderstanding how to use FOREIGN KEY?  Then why would it
> work one time and not the other?
> 
> http://www.postgresql.org/docs/aw_pgsql_book/node159.html doesn't have
> any column names after 'refrences <tablename>'.
> 
> 
> -- 
> Joseph Shraibman
> jks@selectacast.net
> Increase signal to noise ratio.  http://www.targabot.com
> 



Re: FOREIGN KEY errors.

From
Joseph Shraibman
Date:
Script to reproduce the problem.  It drops the tables at the end of the
script.

Stephan Szabo wrote:
> 
> There was a bug (which should be fixed for 7.1) that got the
> arguments wrong for the alter time check of the existing data.
> I think I should be able to get a patch together to fix it once
> I get a copy of the 7.0.3 source.
> 
> Can you send the table schema as well so I can test it out?
> 

Script to reproduce the problem.  It drops the tables at the end of the
script.  If data is not inserted into mtable there is no problem.
========================================================================================

create table utable (        uk int not null,pk int not null,thetext text,primary key (uk, pk) 
);    

create table mtable(id serial not null primary key,mtext text,o int,  /* corresponds to uk */p int  /* corresponds to
pk*/
 
);

insert into utable (uk,pk,thetext) values (2,4,'blah 2 4');
insert into utable (uk,pk,thetext) values (2,5,'blah 2 5');

insert into mtable (mtext,o,p) values ('m 2 4',2,4);


alter table mtable add FOREIGN KEY (p,o) REFERENCES utable (pk,uk);

drop sequence mtable_id_seq;
drop table mtable;
drop table utable;



-- 
Joseph Shraibman
jks@selectacast.net
Increase signal to noise ratio.  http://www.targabot.com