Re: Happy column adding

Peter Eisentraut <peter_e@gmx.net>

From: Peter Eisentraut <peter_e@gmx.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Hiroshi Inoue <Inoue@tpf.co.jp>, PostgreSQL Development <pgsql-hackers@postgresql.org>
Date: 2000-01-26T18:35:28Z
Lists: pgsql-hackers
On 2000-01-25, Tom Lane mentioned:

> > IIRC,there were some reason that default for new column had been rejected.
> 
> Well, yeah: wouldn't you expect that "ADD COLUMN x DEFAULT 42" would
> cause every row currently existing in the table to acquire x = 42,

Sure. But whatever happened to
pg_exec_query_dest("update <tablename> set <newcolname> = <default>")

This is what users would have to execute anyway, right?

Look at this:

=> create table test1 (a text);
=> insert into test1 values ('blah');
=> insert into test1 values ('blah');
=> insert into test1 values ('blah');
=> alter table test1 add column b serial;
=> select * from test1;
  a   | b
------+---
 blah | 1
 blah | 2
 blah | 3
(3 rows)

Not good?

> rather than x = NULL?  In fact that would *have* to happen to allow
> constraints to be added; consider ADD COLUMN x DEFAULT 42 NOT NULL.

Or how about (continuing the above):

=> alter table test1 add column c int not null;
ERROR:  ALTER TABLE: adding NOT NULL attribute to non-empty table requires
a non-NULL default value       

> The only way to make that happen is for ADD COLUMN to switch over to
> an implementation that rewrites all the tuples.  Which I think is the
> right way to go ... but per this discussion, it's not a trivial fix.

So what's the above doing? Seriously, is there silently creeping heap
corruption I'm not seeing?

-- 
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden