Re: Switching Primary Keys to BigInt

From: Mohamed Wael Khobalatte <mkhobalatte(at)grubhub(dot)com>
To: Daniel Verite <daniel(at)manitou-mail(dot)org>
Cc: Michael Lewis <mlewis(at)entrata(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Switching Primary Keys to BigInt
Date: 2020-07-22 14:39:15
Message-ID: CABZeWdzJWZEdqeAMQ7x_1ENSchps19rsF3pa9d-dLPKkGqVhEA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, Jul 22, 2020 at 9:27 AM Daniel Verite <daniel(at)manitou-mail(dot)org>
wrote:

> Mohamed Wael Khobalatte wrote:
>
> > > alter table change_seq alter COLUMN id set data
> > > type bigint;
>
> > This is significant downtime, since it locks exclusively, no? We want to
> > avoid that.
>
> Well, in the steps you mentioned upthread, the transaction starts by
> doing LOCK TABLE some_table, so it will hold an exclusive lock on it
> for the rest of the transaction.
>
> If you can test how the ALTER TABLE... SET TYPE ... compares
> to your procedure in terms of downtime, that would be interesting.
> To me, it's not clear why the procedure in multiple steps would
> be better overall than a single ALTER TABLE.
>

We lock the table as a precaution, with the understanding that we are
undergoing a "small" downtime to finish replacing the int id by the new
bigint. The only slow thing in my procedure is the sequential scan that the
ADD CONSTRAINT does because the column is a primary key. A direct alter
table would be far slower, not to mention space requirements?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2020-07-22 14:42:25 Re: Logical replication from 11.x to 12.x and "unique key violations"
Previous Message Daniel Verite 2020-07-22 13:27:08 Re: Switching Primary Keys to BigInt