This is a stupid garden variety bug and I'm not sure why I didn't catch
it previously.  The patch included is against fairly current sources, but
it may apply cleanly against 7.0.2 as well.

On Fri, 6 Oct 2000, Vilson farias wrote:

> I found a irregular behavior with constraints.
> 
> I can only set a referencial integrity between these tables when there are
> no data, even if there are no change to referential integrity violation.
*** pgsql.old/src/backend/commands/command.c    Tue Sep 12 14:06:47 2000
--- pgsql/src/backend/commands/command.c        Tue Oct 10 12:15:13 2000
***************
*** 1388,1402 ****
                                {
                                        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);
--- 1388,1405 ----
                                {
                                        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);

Reply via email to