L2 Info : Bases de données
 
◃  Ch. 6 Retour sur DDL  ▹
 

Modification de tables sous PostgreSQL

  • Exemple avec la table Demo définie sans contraintes
    CREATE TABLE demo (
        col_un int,
        col_deux varchar(4),
        col_trois date
    ); 
  • Ajout de colonnes (idem pour MySQL) :
    ALTER TABLE nom ADD COLUMN colnom type [col_constraint[...]]
    ALTER TABLE demo ADD COLUMN col_quatre CHAR(2);
  • Suppression de colonnes (idem pour MySQL) :
    ALTER TABLE nom DROP COLUMN colnom
    
    ALTER TABLE demo DROP COLUMN col_quatre;
  • Modification de type (depuis PostgreSQL 8.0) :
    ALTER TABLE nom ALTER COLUMN colnom TYPE nouvtype 
    
    INSERT INTO demo VALUES (2, 'abcd', '1999-01-01');
    ALTER TABLE demo ALTER COLUMN col_deux TYPE varchar(3);
      -- génére une erreur car une donnée existe de taille supérieure à trois
    
    ALTER TABLE demo ALTER COLUMN col_quatre TYPE CHAR(1);
      -- valide : n'entraine pas de suppression d'information
  • Modification de contrainte :
    ALTER TABLE nom [ADD | DROP] [CONSTRAINT nomContrainte] definitionContraine?
    ALTER COLUMN colnom [SET | DROP] [NULL | NOT NULL]
    ALTER COLUMN colnom [SET DEFAULT val | DROP DEFAULT]
    
    -- ajout d'une contrainte de clé primaire
    ALTER TABLE demo ADD PRIMARY KEY(col_un);
    -- la col_deux devient obligatoire
    ALTER TABLE demo ALTER COLUMN col_deux SET NOT NULL;
    -- impossible de rendre col_quatre obligatoire
    -- un enregistrement possède cet attribut non renseigné
    ALTER TABLE demo ALTER COLUMN col_quatre SET NOT NULL; -- impossible
    -- ajout d'une contrainte de domaine nommée
    ALTER TABLE demo ADD CONSTRAINT domaineLimite
        CHECK (col_trois BETWEEN '1970-01-01' AND '2050-01-01');
    -- suppression de la contrainte nommée
    ALTER TABLE demo DROP CONSTRAINT domaineLimite;
    -- suppression de la clé primaire avec le nom par défaut (attribué automatiquement)
    ALTER TABLE demo DROP CONSTRAINT demo_pkey;
  • Renommage de colonnes :
    ALTER TABLE name RENAME COLUMN  colnom TO nouvcolnom
    
    ALTER TABLE demo RENAME COLUMN col_quatre TO col4;
  • Pour aller plus dans le détail (https://www.postgresql.org/docs/16/sql-altertable.html)