REVIEW: ALTER TABLE ... ADD FOREIGN KEY ... NOT ENFORCED

Marko Tiikkaja <marko.tiikkaja@cs.helsinki.fi>

From: Marko Tiikkaja <marko.tiikkaja@cs.helsinki.fi>
To: Simon Riggs <simon@2ndQuadrant.com>
Cc: Peter Geoghegan <peter.geoghegan86@gmail.com>, Robert Haas <robertmhaas@gmail.com>, Dimitri Fontaine <dimitri@2ndquadrant.fr>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org
Date: 2011-01-23T17:50:45Z
Lists: pgsql-hackers
Hi Simon,

On 1/14/2011 1:15 PM, Simon Riggs wrote:
> Patch to implement the proposed feature attached, for CFJan2011.

Overall, I think the patch looks good, but I found some problems with 
it.  In tablecmds.c you have:

+       if (found && con->contype == CONSTR_FOREIGN && !con->convalidated)

which I don't think is correct, and my tests seem to agree; the actual 
validation doesn't happen at all.  Changing that to CONSTRAINT_FOREIGN 
makes the validation part work, but then I get:

ERROR:  cache lookup failed for constraint 16419

when trying to drop the table and the regression tests fail because of 
this.  Also having a regression test where the validation fails seems 
like a good idea.

Another problem I found is that psql doesn't indicate in any way that a 
FOREIGN KEY constraint is not validated yet.

I also think that having the function for getting a list of values that 
violate the constraint would be helpful.  Any particular reason why you 
decided to omit it from this patch?


Regards,
Marko Tiikkaja