ALTER TABLE

Nom

ALTER TABLE — modifie les propriétés des tables
ALTER TABLE table
    [ * ] ADD [ COLUMN ] ER">coBLE> type
ALTER TABLE table
    [ * ] RENAME [ COLUMN ] ER">coBLE> TO newcolumn
ALTER TABLE table
    RENAME TO newtable
  

Entrées

table

le nom d'une table existante à modifier

column

nom d'une colonne existante ou nouvelle

type

Type de la nouvelle colonne

newcolumn

nouveau nom pour une colonne existante

newtable

nouveau nom pour une table existante

Sorties

ALTER

message retourné depuis la colonne ou la table renommée.

NEW

message retourné depuis la colonne ajoutée.

ERROR

message retourné si la table ou la colonne n'est pas disponible.

Description

ALTER TABLE change la définition d'une table existante. Les nouvelles colonnes et leur type sont spécifiés dans le même style et avec les mêmes restrictions que dans CREATE TABLE. La clause RENAME change le nom de la table ou de la colonne sans changer les données contenues dans la table affectée. Ainsi, la table ou la colonne restera du même type et de la même taille après que la commande soit exécutée. Vous devez être propriètaire de la table pour pouvoir changer ce schéma.

Notes

Le mot-clé COLUMN peut être omis.

"[*]" suivant un nom de table indique que la commande doit être lancée sur cette table et toutes les autres tables au-dessous d'elle dans la hiérarchie héritage.

Referez vous à CREATE TABLE pour plus de renseignements sur la description des arguments valides.

Utilisation

Pour ajouter une colonne de type VARCHAR à une table :
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
   

pour renommer une colonne existante :
ALTER TABLE distributors RENAME COLUMN address TO city;
   

pour renommer une table existante :
ALTER TABLE distributors RENAME TO suppliers;
   

Compatibilité

SQL92

ALTER TABLE/RENAME est une extension du langage Postgres.

SQL92 spécifie quelques fonctionnalités additionelles pour la commande ALTER TABLE qui ne sont pas encore directement supportées par Postgres.

ALTER TABLE table ALTER [
       COLUMN ] column
    SET DEFAULT default
ALTER TABLE table ALTER [
       COLUMN ] column
    ADD [ CONSTRAINT >constrain> ] table-constraint
      

place la valeur par défaut ou la contrainte spécifiée dans la définition de colonne de la table. Voir CREATE TABLE pour la syntaxe par défaut et les clauses contrainte-table. Si une clause par défaut existe déja, elle sera remplacée par la nouvelle définition. Si certaines contraintes sur cette colonne existent déja, elles seront retenues en utilisant le AND booléen avec la nouvelle contrainte.

La mise en place de nouvelles contraintes default sur une colonne existante, la table doit être recréée et relancée :
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3) DEFAULT 1,
    name     VARCHAR(40) NOT NULL,
    city     VARCHAR(30)
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
       

ALTER TABLE table
    DROP DEFAULT default
ALTER TABLE table
    DROP CONSTRAINT constraint { RESTRICT | CASCADE }
      

supprime la valeur default spécifiée par défaut ou la règle spécifiée par contrainte dans la définition de la table. Si RESTRICT est spécifié, seulement une contrainte avec des contraintes non dépendantes peut être détruite. Si CASCADE est spécifié, toutes les contraintes dépendantes de cette contrainte sont aussi supprimées.

Pour effacer une valeur default ou des contraintes sur une colonne existante, la table doit être recréée et relancée :
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
       

ALTER TABLE table
    DROP [ COLUMN ] column { RESTRICT | CASCADE }
      

supprime une colonne d'une table. Si RESTRICT est spécifié seulement une colonne avec des objets non dépendants peut être détruite. Si CASCADE est spécifié, tous les objets qui sont dépendants de cette colonne sont aussi supprimés.

Pour effacer une colonne existante la table doit être recréée et relancée :
CREATE TABLE temp AS SELECT did, city FROM distributors;    
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3)  DEFAULT 1,
    name     VARCHAR(40) NOT NULL,
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;