Lekcje modułu (3/4)
Modyfikowanie struktury: ALTER TABLE
Potrzeby aplikacji zmieniają się z biegiem czasu, a baza danych musi za nimi nadążać. ALTER TABLE to (niezwykle wszechstronne) polecenie przeznaczone do modyfikowania istniejących schematów tabel bez konieczności ich usuwania (ryzykując znajdujące się w nich dane).
Modyfikowanie kolumn (ADD / DROP / ALTER)
Dodanie kolumny wymaga ostrożności. Jeśli tabela zawiera już dane, dodanie kolumny „NOT NULL” spowoduje błąd w Postgresie: co powinna wstawić w starych wierszach? Musisz powiązać 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;Nie tylko dodawanie lub usuwanie: często trzeba ponownie skonfigurować typ kolumny lub jedno z jej ograniczeń:
-- 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;Dodawanie ograniczeń w czasie wykonywania
Podobnie jak w przypadku CREATE TABLE, możemy użyć ALTER TABLE, aby dołączyć CONSTRAINT do tabeli już używanej w aplikacji produkcyjnej.
-- 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;Zmiana nazwy
Można zmieniać nazwy kolumn i tabel:
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;Spróbuj
Tabela „produkty” zawiera obecnie kolumnę „nazwa”. Zmodyfikuj tabelę, zmieniając nazwę kolumny „nazwa” na „tytuł”. Użyj operacji ZMIEŃ NAZWĘ KOLUMNY.
Pokaż wskazówkę
Składnia: ALTER TABLE ... ZMIEŃ NAZWĘ KOLUMNY ... TO ...
Rozwiązanie dostępne po 3 próbach
Dodawanie ograniczeń w postprodukcji
Zmodyfikuj tabelę „produkty”, dodając ograniczenie CHECK (o nazwie „verifica_prezzo”), które wymaga, aby cena (kolumna „cena”) była większa niż 0. Ograniczenie należy dodać bez usuwania oryginalnej kolumny.
Pokaż wskazówkę
Składnia: ALTER TABLE tabela ADD CONSTRAINT nazwa CHECK (...)
Rozwiązanie dostępne po 3 próbach