DDL / СхемаСредний
ALTER TABLE
Изменяет структуру существующей таблицы: добавляет колонки, меняет типы, добавляет ограничения.
Синтаксис
ALTER TABLE table ADD COLUMN col type [constraints]; DROP COLUMN col; ALTER COLUMN col TYPE new_type; ADD CONSTRAINT name CHECK (condition);
Объяснение
ALTER TABLE — основная команда для изменения схемы. В PostgreSQL DDL транзакционен — можно откатить.
Осторожно в production:
- ADD COLUMN с NOT NULL DEFAULT — мгновенно с PostgreSQL 11+
- ALTER COLUMN TYPE — перезаписывает всю таблицу, долгая блокировка
- Для больших таблиц используй zero-downtime стратегии
Пример
-- Добавить колонку (быстро в PG11+) ALTER TABLE users ADD COLUMN phone TEXT; -- Добавить CHECK constraint ALTER TABLE products ADD CONSTRAINT price_positive CHECK (price > 0); -- Переименовать колонку ALTER TABLE users RENAME COLUMN fullname TO full_name;
Связанные термины
Анекдоты по теме
— Почему не стоит использовать SELECT * в production коде? — Если добавить колонку — приложение сломается на неожиданном поле. — Если удалить — тоже сломается. — Больше данных по сети и из базы. — Covering index не работает. — Явно указывай колонки. Это документация запроса.
Почему HAVING обижается на WHERE? — Потому что WHERE фильтрует строки ДО группировки, а HAVING — ПОСЛЕ. WHERE думает, что он главный, а HAVING знает: истина где-то в агрегатах.
Оптимизатор запросов говорит медленному подзапросу: — Ты почему тормозишь? — Я каждую строчку с каждой сравниваю через IN. — Используй EXISTS. — А я знаю, что я существую? — Вот поэтому ты и тормоз.