È arrivato il momento di parlare di come modificare le tabelle che esistono già. Nella vita di un progetto, quasi nulla resta uguale per sempre — le richieste possono arrivare all’improvviso, tipo bombardilokrokodilo. Per esempio, il product manager decide che ogni utente deve avere un identificatore unico per il colore preferito dello sfondo del profilo. Oppure ti rendi conto che VARCHAR(50) per il nome non basta, perché nella base c’è già un utente che si chiama "Bombardilokrokodilo-Junior-Terzo".
Beh, in PostgreSQL c’è uno strumento per queste cose — il comando ALTER TABLE.
ALTER TABLE è il comando che ti permette di modificare la struttura delle tabelle esistenti. Con lui puoi:
- Aggiungere nuove colonne;
- Rimuovere colonne inutili;
- Cambiare il tipo di dati di una colonna;
- Rinominare la tabella o le sue colonne;
- Aggiungere o rimuovere vincoli come
NOT NULL,UNIQUEe molto altro.
Insomma, è come se avessi già costruito una casa (la tabella), ma ora vuoi aggiungere una nuova stanza (colonna) o togliere un ripostiglio inutile (eliminare una colonna).
Sintassi di ALTER TABLE
La struttura generale del comando è abbastanza intuitiva:
ALTER TABLE tabella
azione_modifica;
Dove:
tabella— il nome della tabella che vuoi modificare;-
azione_modifica— l’azione specifica che vuoi fare (tipo aggiungere una colonna, eliminarla o cambiare il tipo di dati).
Esempi di utilizzo di ALTER TABLE
Aggiungere una nuova colonna
Se vuoi aggiungere una nuova colonna alla tabella, usa il comando ADD COLUMN. Ecco un esempio:
ALTER TABLE students
ADD COLUMN email VARCHAR(100);
Questo comando aggiunge la nuova colonna email alla tabella students, dove verrà salvato l’indirizzo email dello studente. Il tipo di dati della colonna è una stringa fino a 100 caratteri.
Mettiamo che hai creato la tabella degli studenti ma ti sei dimenticato di aggiungere la data di iscrizione. Ecco come rimediare:
ALTER TABLE students
ADD COLUMN enrollment_date DATE;
Ora hai la colonna enrollment_date e puoi salvare la data di iscrizione.
Eliminare una colonna
Se decidi che una colonna non serve più, usa il comando DROP COLUMN. Per esempio:
ALTER TABLE students
DROP COLUMN email;
Questo comando elimina la colonna email dalla tabella students. Ricorda che i dati di questa colonna verranno eliminati senza possibilità di recupero.
Attenzione:
Se provi a eliminare una colonna che viene usata in altre tabelle (tipo come chiave esterna), PostgreSQL potrebbe darti errore. In questi casi, prima devi eliminare le dipendenze.
Cambiare il tipo di dati di una colonna
A volte il tipo di dati scelto all’inizio non va bene. Per esempio, hai deciso di salvare l’età degli studenti come SMALLINT, ma poi capisci che non basta e vuoi usare BIGINT. Ecco come si fa:
ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;
Attenzione: se ci sono già dati nella colonna, PostgreSQL controlla se possono essere convertiti al nuovo tipo. Se non si può, riceverai un errore.
Mettiamo che hai creato la colonna description come VARCHAR(100), ma poi ti rendi conto che la descrizione dei corsi può essere molto più lunga. Cambia il tipo di dati in TEXT:
ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;
Ora puoi salvare descrizioni complete dei corsi senza limiti di lunghezza.
Rinominare una colonna
Se vuoi cambiare il nome di una colonna, usa il comando RENAME COLUMN:
ALTER TABLE students
RENAME COLUMN name TO full_name;
Ora la colonna name si chiamerà full_name.
Rinominare una tabella
Puoi anche cambiare il nome della tabella stessa. Per questo si usa il comando RENAME TO:
ALTER TABLE students
RENAME TO university_students;
Ora la tabella students si chiamerà university_students.
Impostare/rimuovere il vincolo NOT NULL
Supponiamo che hai creato una colonna ma ti sei dimenticato di renderla obbligatoria (NOT NULL). Nessun problema! Puoi aggiungere questo vincolo dopo:
ALTER TABLE students
ALTER COLUMN name SET NOT NULL;
Se vuoi togliere il vincolo NOT NULL, usa il comando DROP NOT NULL:
ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;
Impostare un valore di default
Se la colonna esiste già ma vuoi impostare un valore di default, usa SET DEFAULT:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;
Per togliere il valore di default, esegui:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;
Vedremo ogni comando in dettaglio nelle prossime tre lezioni. Quindi preparati :)
Errori tipici con ALTER TABLE
Quando lavori con ALTER TABLE possono capitare errori. Ecco i più comuni:
Tentativo di cambiare il tipo di dati che non è compatibile con i dati attuali. Per esempio, se nella colonna age ci sono già dati e provi a convertirla in una stringa VARCHAR, otterrai un errore. Soluzione: prima elimina o converti i dati.
Tentativo di eliminare una colonna che viene usata come chiave esterna o indice. PostgreSQL non te lo permette per mantenere l’integrità dei dati. Prima di eliminare colonne dipendenti, devi togliere le relazioni.
Errori di sintassi. Il comando ALTER TABLE è molto flessibile, ma richiede di rispettare la sintassi esatta. Per esempio, il comando ADD COLUMN deve includere il tipo di dati.
Scenari reali di utilizzo
Nella vita reale il comando ALTER TABLE si usa di continuo. Lo puoi incontrare quando:
- Aggiungi nuovi dati a una tabella esistente (tipo nuove colonne);
- Ottimizzi il database (per esempio cambiando i tipi di dati per risparmiare memoria);
- Correggi errori di progettazione (tipo se ti sei dimenticato dei vincoli o hai scelto il tipo di dati sbagliato).
Ora hai capito quanto è potente il comando ALTER TABLE. È uno strumento forte che ti aiuta a gestire i cambiamenti nel progetto. L’importante è stare attenti e non avere fretta, così non "rompi la casa" (la tua tabella) cercando di aggiungere una nuova stanza.
GO TO FULL VERSION