CREATE SCHEMA — Définir un nouveau schéma
CREATE SCHEMAnom_schéma
[ AUTHORIZATIONspécification_rôle
] [élément_schéma
[ ... ] ] CREATE SCHEMA AUTHORIZATIONspécification_rôle
[élément_schéma
[ ... ] ] CREATE SCHEMA IF NOT EXISTSnom_schéma
[ AUTHORIZATIONspécification_rôle
] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONspécification_rôle
oùspécification_rôle
peut valoir :user_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
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.
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.
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.)
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;
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.