On Mon, 2005-10-03 at 23:24 -0400, Greg Stark wrote: > Hannu Krosing <[EMAIL PROTECTED]> 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; -- ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend