Skip site navigation (1) Skip section navigation (2)

Re: Bug in pg_get_constraintdef (for deferrable constraints)

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Magnus Hagander <mha(at)sollentuna(dot)net>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Bug in pg_get_constraintdef (for deferrable constraints)
Date: 2003-01-01 20:10:02
Message-ID: 200301012010.h01KA2d12147@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackers
I can reproduce this failure here too.  I am actually quite confused
because:

	1)  I know this deferrable stuff works or used to work
	2)  I can't find relivant references to
	condeferrable/Anum_pg_constraint_condeferrable and
	condeferred/Anum_pg_constraint_condeferred in the code.

I see the values being stored on constriant creation, but not being used
anywhere:

	$ rgrepc condefer
	./backend/catalog/pg_constraint.c:      values[Anum_pg_constraint_condeferrable - 1] = BoolGetDatum(isDeferrable);
	./backend/catalog/pg_constraint.c:      values[Anum_pg_constraint_condeferred - 1] = BoolGetDatum(isDeferred);
	./include/catalog/pg_constraint.h:      bool            condeferrable;  /* deferrable constraint? */
	./include/catalog/pg_constraint.h:      bool            condeferred;    /* deferred by default? */
	./include/catalog/pg_constraint.h:#define Anum_pg_constraint_condeferrable     4
	./include/catalog/pg_constraint.h:#define Anum_pg_constraint_condeferred       5

I am confused.

---------------------------------------------------------------------------

Magnus Hagander wrote:
> Postgresql 7.3.1 on Linux i386 - but from what I can see it is on all platforms
> 
> It seems pg_get_constraintdef does not remember the setting "DEFERRABLE" on a constraint. This has the effect that it does not show up in psql \d commands, and it is also *not* included in backups from pg_dump.
> 
> 
> Reproduce:
> CREATE TABLE foo.prim(i int PRIMARY KEY);
> CREATE TABLE foo.for1(j int REFERENCES foo.prim(i) NOT DEFERRABLE);
> CREATE TABLE foo.for2(j int REFERENCES foo.prim(i) DEFERRABLE);
> 
> "\d foo.for1" and "\d foo.for2" will then show the exact same definition of the constraint:
>        Table "foo.for2"
>  Column |  Type   | Modifiers
> --------+---------+-----------
>  j      | integer |
> Foreign Key constraints: $1 FOREIGN KEY (j) REFERENCES foo.prim(i) ON UPDATE NO ACTION ON DELETE NO ACTION
> 
> 
> 
> Seems to me like ruleutils.c at around line 600 is the place, and that is has no concept of DEFERRABLE anywhere near that, but I'm not comfortable enough in there to produce a patch myself... 
> 
> 
> //Magnus
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
> http://archives.postgresql.org
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

In response to

Responses

pgsql-hackers by date

Next:From: Tom LaneDate: 2003-01-01 20:46:20
Subject: Re: Bug in pg_get_constraintdef (for deferrable constraints)
Previous:From: Magnus HaganderDate: 2003-01-01 18:41:16
Subject: Bug in pg_get_constraintdef (for deferrable constraints)

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group