--
Greg
On 21 May 2009, at 12:26, Tom Lane <t...@sss.pgh.pa.us> wrote:
Greg Stark <st...@enterprisedb.com> writes:
On Thu, May 21, 2009 at 4:22 PM, Tom Lane <t...@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
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers