Add column with default value in big table - splitting of updates can help?

Поиск
Список
Период
Сортировка
От Durumdara
Тема Add column with default value in big table - splitting of updates can help?
Дата
Msg-id CAEcMXhk6sutuZR5BAXriBO_2Yj7ObOVbeT8Hw_J1aZwD83Ufrg@mail.gmail.com
обсуждение исходный текст
Ответы Re: Add column with default value in big table - splitting of updatescan help?
Re: Add column with default value in big table - splitting ofupdates can help?
Список pgsql-general
Dear Members!

I've read this article, but I need your experience in this theme.


alter table tk
  add colum field1 default 'MUCH';

The table tk have 200 million rows. The autovacuum is no problem, only the long update.

But as I read the alter makes table lock, so this update locks the table for long time.

The article said we need to do this:

1. add column without default - fast.
2. set default on column.
3. update it where is null.

What we can save with this method?

As I suppose the table lock substituted with long update (row locks on whole table).

The article suggested to replace long update to shorter sequences (10000-100000 records by cycle).

We used to execute these SQL-s (alter, default, update) in one transaction.
So I can't make commit there.

What is the difference between "full update" and "updates by 10000 records" when I'm in a single transaction?

Is it possible that this pseudo code makes less locks WITHOUT INNER COMMIT?

Pseudo:
----------------------
begin 
  while True loop
     update tk set field1 = ' MUCH' when field1 is NULL and id in
        (select id from tk where field1 is NULL limit 100000);
     if not FOUND then
        break;
  end while;
end   
  ---------------------- 

Is there any advance when I split updates? I'm in one transaction.

TR. START
----
1. alter add col 
2. set default
3. updates
---
TR. COMMIT

Or it isn't help me?

Because the whole transaction locks the other users also, just like "alter add colum wit hdefault statement"?

Thank you for your and help!

Best regards
   dd

В списке pgsql-general по дате отправления:

Предыдущее
От: Achilleas Mantzios
Дата:
Сообщение: Re: Exclude constraint on ranges : commutative containment : allowonly complete containment
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Add column with default value in big table - splitting of updatescan help?