Переименование столбцов без остановки
Добавьте новый столбец, выполняйте двойную запись, заполните его существующими данными, переключите чтение и удалите старый — это классический шаблон переименования без остановки
«Переименование столбцов без остановки» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Наивный подход не работает
ALTER TABLE t RENAME COLUMN a TO b; изменяет только метаданные и выполняется быстро. НО приложение ожидает столбец «a»; после переименования каждый запрос, читающий «a», завершится с ошибкой.
Стратегия: расширение → перенос → сокращение
Классический шаблон миграции без остановки работы:
- Расширение — добавьте новый столбец, не удаляя старый
- В течение некоторого времени записывайте данные в оба столбца
- Перенос — перенесите исторические данные в новый столбец пакетами
- Переключите чтение на новый столбец
- Сокращение — удалите старый столбец
Пошаговое переименование user_name → full_name
Подробное руководство:
Шаг 1 — добавьте новый столбец
Без остановки работы (только метаданные в PG 11+ при использовании постоянного значения по умолчанию):
ALTER TABLE users ADD COLUMN full_name VARCHAR(100);Шаг 2 — двойная запись
Разверните код, который записывает данные в оба столбца (BOTH):
// App writes to both:
UPDATE users SET user_name = $1, full_name = $1 WHERE id = $2;
INSERT INTO users (..., user_name, full_name) VALUES (..., $name, $name);Шаг 3 — заполните новый столбец
Скопируйте исторические данные пакетами:
UPDATE users SET full_name = user_name
WHERE full_name IS NULL
AND id IN (
SELECT id FROM users WHERE full_name IS NULL LIMIT 10000
);
-- Run in a loop until 0 rows affected.Шаг 4 — добавьте NOT NULL без остановки работы
После заполнения нового столбца безопасно добавьте ограничение NOT NULL:
ALTER TABLE users
ADD CONSTRAINT fn_not_null CHECK (full_name IS NOT NULL) NOT VALID;
ALTER TABLE users VALIDATE CONSTRAINT fn_not_null;
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
ALTER TABLE users DROP CONSTRAINT fn_not_null;Шаг 5 — переключите чтение
Разверните код, который читает full_name вместо user_name.
Шаг 6 — прекратите двойную запись
Разверните код, который записывает данные только в full_name.
Шаг 7 — удалите старый столбец
Без остановки работы (только метаданные):
ALTER TABLE users DROP COLUMN user_name;Компромисс: время и сложность
Простое переименование превращается в 4–7 развёртываний в течение нескольких дней или недель. Для нетривиальных рабочих систем это единственный безопасный путь.
Переименование таблиц
Похожий, но более сложный шаблон. Используйте VIEW как временный псевдоним:
ALTER TABLE old_name RENAME TO new_name;
CREATE VIEW old_name AS SELECT * FROM new_name;
-- Deploy new code. Then drop the view.Итоги
Переименование столбцов без остановки работы выполняется по схеме «расширение → перенос → сокращение».
- Добавьте новый столбец
- Выполняйте двойную запись
- Заполните новый столбец пакетами
- Переключите чтение
- Прекратите запись в старый столбец
- Удалите старый столбец
Быстрая проверка
Какая фаза наступает IMMEDIATELY после развёртывания двойной записи в старый и новый столбцы?
Часто задаваемые вопросы
Урок «Переименование столбцов без остановки» бесплатный?
Да — полный текст урока «Переименование столбцов без остановки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Переименование столбцов без остановки»?
Добавьте новый столбец, выполняйте двойную запись, заполните его существующими данными, переключите чтение и удалите старый — это классический шаблон переименования без остановки Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Переименование столбцов без остановки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Миграции без остановки: почему ALTER TABLE блокирует таблицы
- Параллельное создание индексов (CREATE INDEX CONCURRENTLY)
- Переименование столбцов без остановки
- Инструменты: Flyway, Liquibase, Sqitch