Миграция базы данных без простоев - PullRequest
1 голос
/ 19 июня 2020

В нашей организации нам необходимо выполнить миграцию базы данных для данных реального сайта. Мы хотим добавить столбец со значением по умолчанию в таблицу с примерно 1000 строками. Можете ли вы предложить какой-либо метод, чтобы у нас было нулевое или минимальное время простоя. Мы используем базу данных postgresql и приложение elixir phoenix. Спасибо.

PS: мы хотим минимального времени простоя, а не точного нуля. Также мы хотим выполнить миграцию с помощью Ecto в эликсире, а не с помощью скрипта.

Также, если вы можете указать ожидаемое время, необходимое для запуска миграции, когда у нас установлено ограничение по умолчанию.

1 Ответ

0 голосов
/ 19 июня 2020

Как правило, ALTER TABLE требует исключительной блокировки таблицы, но добавление столбца со значениями по умолчанию может быть очень быстрым, потому что должен обновляться только системный каталог (и это действие не зависит от размера таблицы):

Для пример с PostgreSQL 12, я получаю:

# select count(*) from t;
  count  
---------
 1000000
(1 row)

Time: 60.003 ms
# begin;
BEGIN
Time: 0.096 ms
# alter table t add newcol int default 19;
ALTER TABLE
Time: 0.457 ms
# commit;
COMMIT
Time: 9.211 ms

Вы должны получить очень небольшое время простоя с PostgreSQL 11 или 12. В более ранней версии PG перезаписывает таблицу: но даже в этом случае 1000 строк - это очень-очень маленький размер и должен быть очень быстрым.

...