On Sun, 2009-12-06 at 14:06 -0500, Tom Lane wrote:
> It fails for me regardless of which column is actually modified.
> It could be this is a consequence of other changes I've been making,
> but given the way ALTER TABLE works it's hard to see why the specific
> column being modified would matter. Anything that forces a table
> rewrite would lead to running through this code path.
In ATAddOperatorExclusionConstraint():
tab->constraints = lappend(tab->constraints, newcon);
if that isn't done, it doesn't go into the code path with that error
message at all.
> I don't really agree with your argument that it's okay to reject the
> case of altering the underlying column type, anyhow. There's enough
> commonality of operator names that it's sensible to try to preserve
> the constraint across a change. Consider replacing a circle with a
> polygon, say. A no-overlap restriction is still sensible.
Let's say someone is changing from box to a postgis geometry
representing a box. For boxes, "=" actually means "equal area" (aside:
this is insane); but for polygons, "=" mean "equal". Changing in the
other direction is bad, as well. I know operators mostly follow
convention most of the time, but I'm concerned with the subtle (and
surprising) differences.
But if someone is changing a column type, which causes a table rewrite,
hopefully they've planned it. I'll look into doing it as you suggest.
Regards,Jeff Davis