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;