Hi,
When I do the following:
ALTER TABLE table ADD COLUMN numeric(x) DEFAULT NULL;
The table is rewritten whereas notes section on the manual page for
ALTER TABLE says otherwise (which holds true for most of the cases
though).
http://www.postgresql.org/docs/devel/static/sql-altertable.html
As an example,
postgres=# create table test as select generate_series(1,1000000) as a;
SELECT 1000000
postgres=# select oid, relname, relfilenode from pg_class where
relname = 'test';
oid | relname | relfilenode
-------+---------+-------------
16709 | test | 16709
(1 row)
postgres=# alter table test add column b numeric(2) DEFAULT NULL;
ALTER TABLE
-- rewritten
postgres=# select oid, relname, relfilenode from pg_class where
relname = 'test';
oid | relname | relfilenode
-------+---------+-------------
16709 | test | 16713
(1 row)
postgres=# alter table test add column c int DEFAULT NULL;
ALTER TABLE
-- not rewritten
postgres=# select oid, relname, relfilenode from pg_class where
relname = 'test';
oid | relname | relfilenode
-------+---------+-------------
16709 | test | 16713
(1 row)
postgres=# alter table test add column d char(5) DEFAULT NULL;
ALTER TABLE
-- rewritten, again
postgres=# select oid, relname, relfilenode from pg_class where
relname = 'test';
oid | relname | relfilenode
-------+---------+-------------
16709 | test | 16717
So, when the type of the new column has type modifier like numeric(x),
char(x) etc. do, this happens.
Is this intentional and/or documented somewhere else? If not, should
it be documented?
--
Amit