Leçons du module (3/4)
Modifier la structure : ALTER TABLE
Les besoins d'une application évoluent avec le temps et la base de données doit suivre le rythme. ALTER TABLE est la commande (extrêmement polyvalente) dédiée à la modification des schémas de table existants sans avoir à les supprimer (risquant les données qu'ils contiennent).
Modification des colonnes (ADD / DROP / ALTER)
L'ajout d'une colonne demande du soin. Si la table contient déjà des données, l'ajout d'une colonne "NOT NULL" générera une erreur dans Postgres : que doit-il insérer dans les anciennes lignes ? Vous devez associer un 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;Pas seulement ajouter ou supprimer : vous devez souvent reconfigurer le type d'une colonne ou l'une de ses contraintes :
-- 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;Ajout de contraintes au moment de l'exécution
Tout comme avec CREATE TABLE, nous pouvons utiliser ALTER TABLE pour attacher un CONSTRAINT à une table déjà utilisée dans l'application de production.
-- 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;Renommer
Les colonnes et les tables peuvent être renommées :
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;Essayez-le
La table « produits » comporte actuellement une colonne « nom ». Modifiez le tableau en renommant la colonne « nom » en « titre ». Utilisez l'opération RENOMMER LA COLONNE.
Afficher l'indice
Syntaxe : ALTER TABLE ... RENOMMER LA COLONNE ... EN ...
Solution disponible après 3 tentatives
Ajout de contraintes en post-production
Modifiez la table 'products' en ajoutant une contrainte CHECK (nommée 'verifica_prezzo') qui nécessite que le prix (colonne 'price') soit supérieur à 0. La contrainte doit être ajoutée sans supprimer la colonne d'origine.
Afficher l'indice
Syntaxe : ALTER TABLE table ADD CONSTRAINT nom CHECK (...)
Solution disponible après 3 tentatives