Re: [BUGS] Altering a table with a rowtype column - Mailing list pgsql-general

From Tom Lane
Subject Re: [BUGS] Altering a table with a rowtype column
Date
Msg-id 29346.1332269326@sss.pgh.pa.us
Whole thread Raw
In response to Re: [BUGS] Altering a table with a rowtype column  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: [BUGS] Altering a table with a rowtype column
List pgsql-general
Robert Haas <robertmhaas@gmail.com> writes:
> On Wed, Mar 7, 2012 at 3:49 PM, Merlin Moncure <mmoncure@gmail.com> wrote:
>> On Wed, Mar 7, 2012 at 2:31 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>>> It is not a bug.  The ALTER ADD ... DEFAULT ... form implies rewriting
>>> every existing tuple of the rowtype to insert a non-null value in the
>>> added column, and we don't have support for doing that to rowtype
>>> columns, only to the target table and descendants.

>> I'm not buying that..it implies no such thing.  In particular, for
>> table-as-rowtype columns, there's no way that I can see to have
>> default values be generated.  So why does it follow that the dependent
>> table has to be rewritten?  Column constraints are not enforced on the
>> rowtype, so it follows that default shouldn't be either considering
>> there's no way to get the default to fire.  Composite type (or table
>> based composite) defaults are applied to the composite as a whole, not
>> to specific fields.

> I think Tom's correct about what the right behavior would be if
> composite types supported defaults, but they don't, never have, and
> maybe never will.  I had a previous argument about this with Tom, and
> lost, though I am not sure that anyone other than Tom thinks that the
> current behavior is for the best.

Um, did I say I thought it was for the best?  I thought I said we don't
have support for doing better.

If we are willing to legislate that column defaults are not and never
will be applied to composite types, then I think Merlin might be right
that we could just let an ALTER ADD with DEFAULT ignore the existence of
composite columns.  I'd always figured that we'd want to try to fix that
omission eventually, though.

> But see commits
> a06e41deebdf74b8b5109329dc75b2e9d9057962 and
> a40b1e0bf32b1da46c1baa9bc7da87f207cd37d8.

Note that the actual problem with the original commit was that it
depended on a misreading of the SQL standard.  Per spec, ALTER ADD with
DEFAULT is *not* the same thing as ALTER ADD followed by ALTER SET
DEFAULT; the contents of the table end up different.

            regards, tom lane

pgsql-general by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: pg_upgrade + streaming replication ?
Next
From: Lonni J Friedman
Date:
Subject: Re: pg_upgrade + streaming replication ?