--
Greg
On 21 May 2009, at 12:26, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Greg Stark <stark@enterprisedb.com> writes:
>> On Thu, May 21, 2009 at 4:22 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>>> Yeah ... I don't see exactly what it would buy to restrict it to
>>> just
>>> the first such value.
>
>> Well it wouldn't buy you steady-state space savings or performance
>> improvements.
>
>> What it would buy you is a much narrowed set of circumstances where
>> ALTER TABLE ADD COLUMN goes from a fast O(1) catalog change to a
>> complete table rewrite. The use cases covered such as "boolean
>> DEFAULT
>> false" or "integer DEFAULT 0" are extremely common.
>
> No, you missed my point --- what's the value of having an
> implementation
> of this that only works for one column? If we do it, I'd envision it
> as an extra column in pg_attribute, and it would work for any
> column(s).
> There's nothing to be gained by restricting it.
>
Oh, I never meant to restrict it to one column.
It might be nice to have vacuum notice the minimum natts in the table
and trim the old unneeded ones. But I can't think of a very compelling
reason to. Perhaps to save memory used in tuplestores?
>> I think Robert Haas is right that we could handle any stable
>> expression by evaluating the expression once and storing only the
>> final resulting value as a constant. That would avoid the problems
>> with dependencies and later changes to functions.
>
> Right, that's *necessary* to avoid changing semantics compared to
> the non-optimized behavior.
I'm coming at it from the other direction. I was assuming we could
only handle simple constants and am trying to see how wide we can
expand it. Doing all stable expressions would seem pretty convincingly
wide to me.
>> Another gotcha is that the default value might be very large.... It
>> can't be very common but I suppose we would have to take some care
>> around that.
>
> Yeah, that occurred to me too. We'd probably not be able to toast
> the pg_attribute column (depending on exactly how it's
> declared/represented) so we'd have to put a limit on the width of
> data value that we'd be willing to handle this way. Seems doable
> though.
>
> regards, tom lane