5.6. Modification des Tables

Quand on crée une table et qu'on se rend compte qu'on a fait une erreur ou que les besoins de l'application ont changés, on peut alors effacer la table et la recréer. Mais ceci n'est pas pratique si la table contient déjà des données ou si la table est référencée par d'autres objets de la base de données (une contrainte de clé étrangère). Par conséquent, PostgreSQL offre une série de commandes permettant de modifier une table existante.

Vous pouvez

Toutes ces actions sont faites en utilisant la commande ALTER TABLE.

5.6.1. Ajouter une colonne

Pour ajouter une colonne, utilisez cette commande:

ALTER TABLE produits ADD COLUMN description text;

La nouvelle colonne sera crée avec des valeurs nulles dans les rangées existantes de la table.

Vous pouvez aussi définir une constante sur la colonne au même moment en utilisant la syntaxe habituelle:

ALTER TABLE produits ADD COLUMN description text CHECK (description <> '');

Une nouvelle colonne ne peut pas avoir une contrainte non nulle puisqu'elle ne contiendra initialement que des valeurs nulles. Mais vous pouvez ajouter une contrainte non nulle après coup. Vous ne pouvez pas non plus définir une valeur A,r défaut pour une nouvelle colonne. D'après le standard SQL, ceci devrait remplir les rangées existantes des nouvelles colonnes avec la valeur par défaut, ce qui n'est pas encore implémenté. Mais on peut définir la valeur par défaut de la colonne plus tard.

5.6.2. Retirer une Colonne

Pour retirer une colonne, utilisez cette commande:

ALTER TABLE produits DROP COLUMN description;

5.6.3. Ajouter une Contrainte

Pour ajouter une contrainte, la syntaxe de contrainte de table est utilisée. Par exemple:

ALTER TABLE produits ADD CHECK (name <> '');
ALTER TABLE produits ADD CONSTRAINT some_name UNIQUE (no_produit);
ALTER TABLE produits ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

Pour ajouter une contrainte non nulle, qui ne peut pas être écrite sous forme d'une contrainte de table, utilisez cette syntaxe:

ALTER TABLE produits ALTER COLUMN no_produit SET NOT NULL;

La contrainte sera vérifiée immédiatement, donc les données de la table doivent remplir la contrainte avant qu'elle soit ajoutée.

5.6.4. Retirer une Contrainte

Pour retirer la contrainte, il faut connaître son nom. Si vous lui avez donné un nom, alors c'est facile. Sinon, le système a attribué un nom généré que vous devez découvrir. La commande \d tablename de psql peut être utile ici; d'autres interfaces peuvent aussi donner le moyen d'examiner les détails de table. Alors, la commande est:

ALTER TABLE produits DROP CONSTRAINT some_name;

(Si vous traitez avec un nom de contrainte généré comme $2, n'oubliez pas qu'il faudra l'entourer de guillemets double pour en faire un identifiant valable.)

Ça marche de la même manière pour toutes les types de contrainte sauf les contraintes non nulles. Pour retirer une contrainte non nulle, utilisez

ALTER TABLE produits ALTER COLUMN no_produit DROP NOT NULL;

(Rappelez vous que les contraintes non nulles n'ont pas de noms.)

5.6.5. Modifier la valeur par défaut

Pour mettre une nouvelle valeur par défaut sur une colonne, utilisez une commande comme celle-ci:

ALTER TABLE produits ALTER COLUMN prix SET DEFAULT 7.77;

Pour retirer toute valeur par défaut, utilisez

ALTER TABLE produits ALTER COLUMN prix DROP DEFAULT;

Ceci est équivalent à mettre une valeur par défaut nulle, au moins dans PostgreSQL. En conséquence, ce n'est pas une erreur de retirer une valeur par défaut qui n'a pas été définie car la valeur nulle est la valeur par défaut implicite.

5.6.6. Renommer une colonne

Pour renommer une colonne:

ALTER TABLE produits RENAME COLUMN no_produit TO numero_produit;

5.6.7. Renommer une Table

Pour renommer une table:

ALTER TABLE produits RENAME TO items;