On 10/5/16, Vitaly Burovoy <vitaly.buro...@gmail.com> wrote: > On 10/5/16, Andres Freund <and...@anarazel.de> wrote: >> On 2016-10-05 15:23:05 -0700, Vitaly Burovoy wrote: >>> On 10/5/16, Andres Freund <and...@anarazel.de> wrote: >>> > On 2016-10-05 11:58:33 -0700, Serge Rielau wrote: >>> >> Dear Hackers, >>> >> I’m working on a patch that expands PG’s ability to add columns to a >>> >> table >>> >> without a table rewrite (i.e. at O(1) cost) from the >>> >> nullable-without-default to a more general case. >>> > >>> > If I understand this proposal correctly, altering a column default >>> > will >>> > still have trigger a rewrite unless there's previous default? >>> >>> No, "a second “exist default"" was mentioned, i.e. it is an additional >>> column in a system table (pg_attribute) as default column values of >>> the "pre-alter" era. It solves changing of the default expression of >>> the same column later. >> >> Don't think that actually solves the issue. The default might be unset >> for a while, for example. Essentially you'd need to be able to associate >> arbitrary number of default values with an arbitrary set of rows. >> >> ALTER TABLE foo ALTER COLUMN withdefault DROP DEFAULT; >> INSERT id = 1; >> ALTER TABLE foo ALTER COLUMN withdefault SET DEFAULT 1; >> ALTER TABLE foo ALTER COLUMN withdefault DROP DEFAULT; >> INSERT id = 2; >> ALTER TABLE foo ALTER COLUMN withdefault SET DEFAULT 2; >> ALTER TABLE foo ALTER COLUMN withdefault DROP DEFAULT; >> INSERT id = 3; >> ALTER TABLE foo ALTER COLUMN withdefault SET DEFAULT 3; >> >> The result here would be that there's three rows with a default value >> for foo that's the same as their id. None of them has that column >> present in the row. > > I'm sorry, while I was writting "pre-alter" I meant > "pre-alter-add-column" era (not "pre-alter-set-default"), all later > default changes "current" default, whereas "pre-alter-add-column" adds > value if current column number < TupleDesc.natts. > > All your DDL are in the "post-alter-add-column" era.
I'm so sorry, I was in a hurry. Of course, - if current column number < TupleDesc.natts. + if current column number > TupleDesc.natts. -- Best regards, Vitaly Burovoy -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers