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
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to