Re: Cases where alter table set type varchar(longer length) still needs table rewrite

From: Jeremy Finzel <finzelj(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Postgres General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Cases where alter table set type varchar(longer length) still needs table rewrite
Date: 2020-02-17 15:01:41
Message-ID: CAMa1XUgLD7kr55ZmwdgtvY9e26WMv4MA5H7aDfG1_Ar7TRGw6Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, Feb 17, 2020 at 8:21 AM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Jeremy Finzel <finzelj(at)gmail(dot)com> writes:
> > I have a table foo with 100 million rows, and a column:
> > - id character varying(20)
> > The following command is the one that we expect to execute very quickly
> (we
> > are not seeing any locking), but it is instead taking a very long time:
> > - ALTER TABLE foo ALTER COLUMN id TYPE varchar(100);
>
> Hm, the code is supposed to avoid a table rewrite, but I wonder if
> there's something else that's not being avoided, such as an index
> rebuild or foreign-key verification. Could we see the whole table
> definition, eg from psql \d+ ?
>
> regards, tom lane
>

Based on your feedback, I quickly identified that indeed, the following
index is causing the re-type to be slow:

"id_idx" btree ("substring"(id::text, 4, 7))

I'm still not sure why a rebuild of this index would be required,
technically speaking. But perhaps in any case the docs should have
something to the effect that expression indexes may require rebuild under
specific circumstances?

Thanks!
Jeremy

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Ron 2020-02-17 15:08:03 Re: Cases where alter table set type varchar(longer length) still needs table rewrite
Previous Message Tom Lane 2020-02-17 14:21:12 Re: Cases where alter table set type varchar(longer length) still needs table rewrite