Re: BUG(fixed) in CREATE TABLE ADD CONSTRAINT... - Mailing list pgsql-bugs
From | Bruce Momjian |
---|---|
Subject | Re: BUG(fixed) in CREATE TABLE ADD CONSTRAINT... |
Date | |
Msg-id | 200109051656.f85GuKh21196@candle.pha.pa.us Whole thread Raw |
In response to | BUG(fixed) in CREATE TABLE ADD CONSTRAINT... (jozzano <jozzano@exa.unicen.edu.ar>) |
List | pgsql-bugs |
This is already fixed in the current sources. > Hi ! > My system is i686/Linux Mandrake 7.0/Postgresql v-7.0.2. > I found a bug in the sql command ALTER TABLE ADD CONSTRAINT..., when I tried to add a composite foreign key constraint > (a FK with more than one attribute). The problem is in the file identified by > $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/command.c,v 1.71 2000/04/12 17:14:57 momjian Exp $ > in the code lines #1139 to #1150, when the function AlterTableAddConstraint() tries to construct the vector of the trigger´stgargs. > >From the position 4 and forward, it must collect the pairs of fk_attrs and pk_attrs (interleaved), but the current codeput first all > fk_attrs and then all the pk_attrs, leading to an error. > I fixed the bug and tested the update and now it works well. I send you a "diff -c command.c command.fixed.c" (with thediff : > GNU diffutils version 2.7) and the output is: > > *** command.c Sun May 6 21:13:06 2001 > --- command.fixed.c Mon Jul 9 19:58:21 2001 > *************** > *** 19,24 **** > --- 19,25 ---- > * manipulating code in the commands/ directory, should go > * someplace closer to the lib/catalog code. > * > + * > *------------------------------------------------------------------------- > */ > #include "postgres.h" > *************** > *** 1138,1152 **** > { > Ident *fk_at = lfirst(list); > > ! trig.tgargs[count++] = fk_at->name; > } > foreach(list, fkconstraint->pk_attrs) > { > Ident *pk_at = lfirst(list); > > ! trig.tgargs[count++] = pk_at->name; > } > ! trig.tgnargs = count; > > scan = heap_beginscan(rel, false, SnapshotNow, 0, NULL); > AssertState(scan != NULL); > --- 1139,1156 ---- > { > Ident *fk_at = lfirst(list); > > ! trig.tgargs[count] = fk_at->name; > ! count+=2; > } > + count = 5; > foreach(list, fkconstraint->pk_attrs) > { > Ident *pk_at = lfirst(list); > > ! trig.tgargs[count] = pk_at->name; > ! count+=2; > } > ! trig.tgnargs = (count-1); > > scan = heap_beginscan(rel, false, SnapshotNow, 0, NULL); > AssertState(scan != NULL); > *************** > *** 1220,1223 **** > LockRelation(rel, lockstmt->mode); > > heap_close(rel, NoLock); /* close rel, keep lock */ > ! } > --- 1224,1227 ---- > LockRelation(rel, lockstmt->mode); > > heap_close(rel, NoLock); /* close rel, keep lock */ > ! } > > > I wish it would help you. If it´s necessary, drop me a line. Regards > Jose Luis Ozzano. > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://www.postgresql.org/search.mpl -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
pgsql-bugs by date: