From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Josh Berkus <josh(at)agliodbs(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Suggested TODO: allow ALTERing of typemods without heap/index rebuild |
Date: | 2009-06-01 20:40:48 |
Message-ID: | 23990.1243888848@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Josh Berkus <josh(at)agliodbs(dot)com> writes:
> I just realized that even if you do this:
> ALTER TABLE foo ALTER COLUMN bar TYPE VARCHAR(1000)
> ... it triggers a heap & index rebuild, even though it's completely
> unnecessary.
Yeah, this has been discussed before; I think it's even in the TODO
list. The stumbling block has been to identify a reasonably clean way
of determining which datatype changes don't require a scan.
> Is this a special case of VARCHAR, or are there other
> types where we should be allowing typemod changes without rebuilding?
There are any number of other cases where it's potentially interesting.
Consider:
* NUMERIC -> NUMERIC with a larger precision and/or scale
* VARBIT lengthening
* TIMESTAMP precision increase
* VARCHAR(anything) -> TEXT
and that's without considering the potential uses for user-defined
types. Now that we allow user-defined types to have usable typmods,
I'm sure there will be applications for them too. There are also
cases where a change might require a scan to ensure a new constraint
is met, but not a rewrite (eg, reducing the max length of VARCHAR).
We could certainly put in a quick hack that just covered a few of the
cases for built-in types, but it's not very pleasing ...
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2009-06-01 20:43:42 | Re: User-facing aspects of serializable transactions |
Previous Message | Zdenek Kotala | 2009-06-01 20:27:07 | Re: list_head naming conflict gcc 4.2/perl/solaris |