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 * FROM users WHERE created_at > '2024-01-01' Результат: 0 строк Программист: но данные есть! DBA: а тип колонки created_at какой? Программист: VARCHAR. DBA: (глубокий вздох)
DBA новичку: — Если ты сделаешь DELETE FROM logs без WHERE, то узнаешь, что такое «каскадное увольнение».
— Почему UUID медленнее INT как первичный ключ? — UUID случайный — вставки разбросаны по всему индексу. — INT последовательный — всегда в конец. — Насколько медленнее? — На больших таблицах B-tree страницы постоянно разбиваются. В разы медленнее INSERT. — Решение? — UUID v7 (упорядоченный по времени) или ULID — случайные, но монотонные.