Andres Freund <and...@anarazel.de> writes: > On 2016-10-05 15:44:56 -0700, Jeff Janes wrote: >>> 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. I think it does work, as long as the "exists default" is immutable. (For safety, personally, I'd restrict it to be a verbatim constant.) The point is that you apply that when you are reading a row that has so few columns that it must predate the original ALTER TABLE ADD COLUMN. Subsequent ADD/DROP/SET DEFAULT affect the "active default" and hence insertions that happen after them, but they don't affect the interpretation of old rows. And of course all rows inserted after the ADD COLUMN contain explicit values of the column, so their meaning is unaffected in any case. You do need two defaults associated with a column to make this work. The "exists default" never changes after the column is added. But in principle, the "exists default" just replaces the NULL value that we implicitly insert now in such cases. Need a better name for the concept, since evidently this name isn't conveying the idea. 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