PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 17.0 » Référence » Commandes SQL » CREATE SCHEMA

CREATE SCHEMA

CREATE SCHEMA — Définir un nouveau schéma

Synopsis

CREATE SCHEMA nom_schéma [ AUTHORIZATION spécification_rôle ] [ élément_schéma [ ... ] ]
CREATE SCHEMA AUTHORIZATION spécification_rôle [ élément_schéma [ ... ] ]
CREATE SCHEMA IF NOT EXISTS nom_schéma [ AUTHORIZATION spécification_rôle ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION spécification_rôle

spécification_rôle peut valoir :

    user_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Description

CREATE SCHEMA crée un nouveau schéma dans la base de données. Le nom du schéma doit être unique au sein de la base de données.

Un schéma est essentiellement un espace de noms : il contient des objets nommés (tables, types de données, fonctions et opérateurs) dont les noms peuvent être identiques à ceux d'objets d'autres schémas. Les objets nommés sont accessibles en préfixant leur nom de celui du schéma (on dit alors que le nom est « qualifié » du nom du schéma), ou par la configuration d'un chemin de recherche incluant le(s) schéma(s) désiré(s). Une commande CREATE qui spécifie un objet non qualifié crée l'objet dans le schéma courant (le premier dans le chemin de recherche, obtenu par la fonction current_schema).

CREATE SCHEMA peut éventuellement inclure des sous-commandes de création d'objets dans le nouveau schéma. Les sous-commandes sont traitées à la façon de commandes séparées lancées après la création du schéma. La différence réside dans l'utilisation de la clause AUTHORIZATION. Dans ce cas, l'utilisateur est propriétaire de tous les objets créés.

Paramètres

nom_schéma

Le nom du schéma à créer. S'il est oublié, le paramètre nomutilisateur est utilisé comme nom de schéma. Le nom ne peut pas débuter par pg_, ces noms étant réservés aux schémas du système.

nom_utilisateur

Le nom de l'utilisateur à qui appartient le schéma. Par défaut, il s'agit de l'utilisateur qui exécute la commande. Pour créer un schéma dont le propriétaire est un autre rôle, vous devez être capable d'utiliser SET ROLE vers ce rôle.

élément_schéma

Une instruction SQL qui définit un objet à créer dans le schéma. À ce jour, seules CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE TRIGGER et GRANT peuvent être utilisées dans la commande CREATE SCHEMA. Les autres types d'objets sont créés dans des commandes séparées après la création du schéma.

IF NOT EXISTS

Ne rien faire (en dehors de l'envoi d'un message d'avertissement) si un schéma de même nom existe déjà. Les sous-commandes élément_schéma ne peuvent pas être utilisées quand cette option est indiquée.

Notes

Pour créer un schéma, l'utilisateur doit avoir le droit CREATE sur la base de données. (Les superutilisateurs contournent cette vérification.)

Exemples

Créer un schéma :

CREATE SCHEMA mon_schema;
  

Créer un schéma pour l'utilisateur joe, schéma nommé joe :

CREATE SCHEMA AUTHORIZATION joe;
  

Créer un schéma nommé test dont le propriétaire sera l'utilisateur joe, sauf s'il existe déjà un schéma test (peu importe si joe est le propriétaire du schéma existant).

CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;
  

Créer un schéma et lui ajouter une table et une vue :

CREATE SCHEMA hollywood
    CREATE TABLE films (titre text, sortie date, recompenses text[])
    CREATE VIEW gagnants AS
        SELECT titre, sortie FROM films WHERE recompenses IS NOT NULL;
  

Les sous-commandes ne sont pas terminées par un point-virgule.

La même chose, autre écriture :

CREATE SCHEMA hollywood;
CREATE TABLE hollywood.films (titre text, sortie date, recompenses text[]);
CREATE VIEW hollywood.gagnants AS
    SELECT titre, sortie FROM hollywood.films WHERE recompenses IS NOT NULL;
  

Compatibilité

Le standard SQL autorise une clause DEFAULT CHARACTER SET dans CREATE SCHEMA, et des types de sous-commandes en plus grand nombre que ceux supportés actuellement par PostgreSQL.

Le standard SQL n'impose pas d'ordre d'apparition des sous-commandes dans CREATE SCHEMA. L'implantation actuelle de PostgreSQL ne gère pas tous les cas de références futures dans les sous-commandes. Il peut s'avérer nécessaire de réordonner les sous-commandes pour éviter ces références.

Dans le standard SQL, le propriétaire d'un schéma est également propriétaire de tous les objets qui s'y trouvent. PostgreSQL permet à un schéma de contenir des objets qui n'appartiennent pas à son propriétaire. Cela n'est possible que si le propriétaire du schéma transmet le privilège CREATE sur son schéma ou si un superutilisateur choisir d'y créer des objets.

La clause IF NOT EXISTS est une extension PostgreSQL.