Модульні уроки (3/4)
Зміна структури: ALTER TABLE
Потреби програми змінюються з часом, і база даних повинна встигати. ALTER TABLE — це (надзвичайно універсальна) команда, призначена для модифікації існуючих схем таблиць без необхідності їх видаляти (ризикуючи даними всередині).
Змінення стовпців (ADD / DROP / ALTER)
Додавання стовпця вимагає обережності. Якщо таблиця вже містить дані, додавання стовпця "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;Спробуйте
У таблиці «продукти» наразі є стовпець «назва». Змініть таблицю, перейменувавши стовпець «name» на «title». Використовуйте операцію RENAME COLUMN.
Показати підказку
Синтаксис: ALTER TABLE ... RENAME COLUMN ... TO ...
Рішення доступне після 3 спроб
Додавання обмежень у постпродакшн
Змініть таблицю «products», додавши обмеження CHECK (під назвою «verifica_prezzo»), яке вимагає, щоб ціна (стовпець «price») була більшою за 0. Обмеження має бути додано без видалення початкового стовпця.
Показати підказку
Синтаксис: ALTER TABLE таблиця ADD CONSTRAINT ім'я CHECK (...)
Рішення доступне після 3 спроб