On Mon, 2005-10-03 at 23:24 -0400, Greg Stark wrote:
> Hannu Krosing <hannu@skype.net> writes:
>
> > On P, 2005-10-02 at 23:00 -0400, Tom Lane wrote:
> > >
> > > Here's another interesting case to think about:
> > >
> > > ALTER TABLE ADD foo integer DEFAULT 1
> > > ...
> > > ALTER TABLE ALTER foo SET DEFAULT 2
> > >
> > > You'll have to pay the table-traversal cost on one step or the other.
> >
> > The second, ALTER ... SET DEFAULT, would only set default for newly
> > inserted columns, not the ones which are missing due to tuples being
> > created before the column existed.
>
> Hm. So you're saying there are only ever exactly two types of defaults. The
> "initial" default that applies to all tuples that were created before the
> column was added. And the "current" default that only ever applies to newly
> created tuples.
>
> That does seem to cleanly close this hole.
I don't think so.
ALTER TABLE tab ADD foo integer DEFAULT 1;
INSERT INTO tab DEFAULT VALUES;
ALTER TABLE tab ALTER foo SET DEFAULT 2
INSERT INTO tab DEFAULT VALUES;
ALTER TABLE tab ALTER foo SET DEFAULT 3
INSERT INTO tab DEFAULT VALUES;
SELECT foo FROM tab;
--