Новый возрастающий столбец
От: Буравчик Россия  
Дата: 12.02.21 09:40
Оценка:
Есть большая таблица. Нужно добавить в нее новую NOT NULL колонку, заполняемую из sequence (autoincrement).
При этом все это сделать с минимумом блокировок. А также обеспечить монотонное возрастание значения колонки при добавлении новых строк.

В общем, хочу такое, но не блокируя таблицу:
ADD COLUMN col DEFAULT seq.nextval NOT NULL



Итак:
1. Добавляю NULLABLE колонку

2. Прохожу в цикле по всем строкам батчами, обновляя это колонку
LOOP
  UPDATE table SET col = seq.nextval WHERE col IS NULL AND ROWNUM < batchsize  -- LIMIT batchsize
  EXIT WHEN processed <= 0
END


3. Дальше включаю автозаполнение для колонки
ALTER TABLE col DEFAULT seq.nextval



Но в момент времени между п.2 и п.3. в таблицу могут добавиться записи. Если сделать еще один UPDATE уже после п.3, то ранее добавленные строки (между п.2 и п.3) будут иметь бОльшие значения колонки, чем позже добавленные (после п.3)

Можно ли проставить значения с сохранением монотонного возрастания колонки?
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.