Уроки модуля (3/4)
Изменение структуры: ALTER TABLE
Потребности приложения со временем меняются, и база данных должна идти в ногу со временем. ALTER TABLE — это (чрезвычайно универсальная) команда, предназначенная для изменения существующих схем таблиц без их удаления (рискуя данным внутри).
Изменение столбцов (ДОБАВИТЬ/УДАЛИТЬ/ИЗМЕНИТЬ)
Добавление столбца требует осторожности. Если таблица уже содержит данные, добавление столбца «NOT NULL» приведет к ошибке в Postgres: что ему следует вставить в старые строки? Вы должны связать DEFAULT.
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque
-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;
-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;Не просто добавление или удаление: вам часто нужно перенастроить type столбца или одно из его ограничений:
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);
-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;
-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;Добавление ограничений во время выполнения
Как и в случае с CREATE TABLE, мы можем использовать ALTER TABLE, чтобы прикрепить CONSTRAINT к таблице, которая уже используется в рабочем приложении.
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);
-- Aggiungi un CHECK
ALTER TABLE products
ADD CONSTRAINT price_positive CHECK (price > 0);
-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;Переименование
И столбцы, и таблицы можно переименовывать:
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;Попробуйте это
В таблице «Продукты» в настоящее время есть столбец «Имя». Измените таблицу, переименовав столбец «имя» в «заголовок». Используйте операцию RENAME COLUMN.
Показать подсказку
Синтаксис: ALTER TABLE... RENAME COLUMN... TO...
Решение доступно после 3 попыток
Добавление ограничений при постобработке
Измените таблицу «продукты», добавив ограничение CHECK (с именем «verifica_prezzo»), которое требует, чтобы цена (столбец «цена») была больше 0. Ограничение необходимо добавлять, не удаляя исходный столбец.
Показать подсказку
Синтаксис: Таблица ALTER TABLE ADD CONSTRAINT имя CHECK (...)
Решение доступно после 3 попыток