CREATE DATABASE — Créer une nouvelle base de données
CREATE DATABASEnom
[ WITH ] [ OWNER [=]nom_utilisateur
] [ TEMPLATE [=]modèle
] [ ENCODING [=]codage
] [ LC_COLLATE [=]lc_collate
] [ LC_CTYPE [=]lc_ctype
] [ TABLESPACE [=]tablespace
] [ ALLOW_CONNECTIONS [=]connexion_autorisee
] [ CONNECTION LIMIT [=]limite_connexion
] [ IS_TEMPLATE [=]est_template
]
CREATE DATABASE
crée une nouvelle
base de données.
Pour créer une base de données, il faut être superutilisateur
ou avoir le droit spécial CREATEDB
.
Voir à ce sujet CREATE USER.
Par défaut, la nouvelle base de données est créée en clonant la base
système standard template1
. Un modèle différent peut
être utilisé en écrivant
TEMPLATE
. En particulier,
la clause nom
TEMPLATE template0
permet de créer une base de
données vierge qui ne contient que les objets standards pré-définis dans
la version de PostgreSQL utilisée. C'est utile
pour ne pas copier les objets locaux ajoutés à template1
.
nom
Le nom de la base de données à créer.
nom_utilisateur
Le nom de l'utilisateur propriétaire de la nouvelle base de données ou
DEFAULT
pour l'option par défaut (c'est-à-dire le
nom de l'utilisateur qui exécute la commande). Pour créer une base de
données dont le propriétaire est un autre rôle, vous devez être un
membre direct ou direct de ce rôle, ou être un superutilisateur.
modèle
Le nom du modèle squelette de la nouvelle base de données ou
DEFAULT
pour le modèle par défaut
(template1
).
codage
Le jeu de caractères de la nouvelle base de données.
Peut-être une chaîne (par exemple 'SQL_ASCII'
), un
nombre de jeu de caractères de type entier ou DEFAULT
pour le jeu de caractères par défaut (en fait, celui de la base
modèle).
Les jeux de caractères supportés par le serveur
PostgreSQL sont décrits dans
Section 23.3.1.
Voir ci-dessous pour des restrictions supplémentaires.
lc_collate
L'ordre de tri (LC_COLLATE
) à utiliser dans la nouvelle
base. Ceci affecte l'odre de tri appliqué aux chaînes, par exemple dans des
requêtes avec ORDER BY, ainsi que l'ordre utilisé dans les index sur les
colonnes texte. Le comportement par défaut est de choisir l'ordre de tri
de la base de données modèle.
Voir ci-dessous pour les restrictions supplémentaires.
lc_ctype
La classification du jeu de caractères (LC_CTYPE
) à
utiliser dans la nouvelle base. Ceci affecte la catégorisation des
caractères, par exemple minuscule, majuscule et chiffre. Le comportement
par défaut est d'utiliser la classification de la base de données modèle.
Voir ci-dessous pour les restrictions supplémentaires.
tablespace
Le nom du tablespace associé à la nouvelle base de
données ou DEFAULT
pour le tablespace de
la base de données modèle. Ce tablespace est celui par
défaut pour les objets créés dans cette base de données. Voir
CREATE TABLESPACE
pour plus d'informations.
allowconn
À false, personne ne peut se connecter à cette base de données. La
valeur par défaut est true, ce qui permet les connexions (sauf
restriction par d'autres mécanismes, comme
GRANT
/REVOKE CONNECT
).
limite_connexion
Le nombre de connexions concurrentes à la base de données. -1 (valeur par défaut) signifie qu'il n'y a pas de limite.
istemplate
À true, cette base de données peut être clonée par tout utilisateur
ayant l'attribut CREATEDB
; à false, seuls les
superutilisateurs ou le propriétaire de la base de données peuvent la
cloner.
L'ordre des paramètres optionnels n'a aucune importance.
La commande CREATE DATABASE
ne peut pas être exécutée à l'intérieur d'un
bloc de transactions.
Les erreurs sur la ligne « ne peut initialiser le répertoire de la base de données » (« could not initialize database directory » dans la version originale) sont le plus souvent dues à des droits insuffisants sur le répertoire de données, à un disque plein ou à un autre problème relatif au système de fichiers.
L'instruction DROP DATABASE est utilisée pour supprimer la base de données.
Le programme createdb est un enrobage de cette commande fourni par commodité.
Les paramètres de configuration au niveau base de données, configurés avec ALTER DATABASE) et les droits sur la base (configurés avec GRANT) ne sont pas copiés à partir de la base de données modèle.
Bien qu'il soit possible de copier une base de données autre que
template1
en spécifiant son nom comme modèle, cela n'est pas
(encore) prévu comme une fonctionnalité
« COPY DATABASE
» d'usage général.
La limitation principale est qu'aucune autre session ne peut être connectée
à la base modèle pendant sa copie. CREATE DATABASE
échouera s'il y a une autre connexion au moment de son exécution ;
sinon, les nouveaux connexions à la base modèle seront verrouillées jusqu'à
la fin de la commande CREATE DATABASE
.
La Section 22.3 fournit plus d'informations à ce
sujet.
L'encodage du jeu de caractère spécifié pour la nouvelle base de données
doit être compatible avec les paramètre de locale
(LC_COLLATE
et LC_CTYPE
).
Si la locale est C
(ou de la même façon
POSIX
), alors tous les encodages sont autorisés. Pour
d'autres paramètres de locale, il n'y a qu'un encodage qui fonctionnera
correctement. (Néanmoins, sur Windows, l'encodage UTF-8 peut être utilisée
avec toute locale.) CREATE DATABASE
autorisera les superutilisateurs à spécifier l'encodage
SQL_ASCII
quelque soit le paramètre locale mais ce
choix devient obsolète et peut occasionner un mauvais comportement des
fonctions sur les chaînes si des données dont l'encodage n'est pas
compatible avec la locale sont stockées dans la base.
Les paramètres d'encodage et de locale doivent correspondre à ceux de la
base modèle, excepté quand la base template0 est utilisée comme modèle. La
raison en est que d'autres bases de données pourraient contenir des données
qui ne correspondent pas à l'encodage indiqué, ou pourraient contenir des
index dont l'ordre de tri est affecté par LC_COLLATE
et
LC_CTYPE
. Copier ces données peut résulter en une base de
données qui est corrompue suivant les nouveaux paramètres.
template0
, par contre, ne contient aucun index pouvant
être affecté par ces paramètres.
L'option CONNECTION LIMIT
n'est qu'approximativement
contraignante ; si deux nouvelles sessions commencent sensiblement en
même temps alors qu'un seul « connecteur » à la base est
disponible, il est possible que les deux échouent. De plus, les
superutilisateurs et les processus worker ne sont pas soumis à cette
limite.
Créer une nouvelle base de données :
CREATE DATABASE lusiadas;
Créer une base de données ventes
possédée par l'utilisateur
app_ventes
utilisant le tablespace espace_ventes
comme espace par défaut :
CREATE DATABASE ventes OWNER app_ventes TABLESPACE espace_ventes;
Pour créer une base music
avec une locale différente :
CREATE DATABASE music LC_COLLATE 'sv_SE.utf8' LC_CTYPE 'sv_SE.utf8' TEMPLATE template0;
Dans cet exemple, la clause TEMPLATE template0
est
nécessaire si la locale spécifiée est différente de celle de
template1
. (Sinon, préciser explicitement la locale est
redondant.)
Pour créer une base music2
avec une locale différente et
et un jeu de caractère différent :
+CREATE DATABASE music2 LC_COLLATE 'sv_SE.iso885915' LC_CTYPE 'sv_SE.iso885915' ENCODING LATIN9 TEMPLATE template0;
La locale et l'encodage spécifiés doivent correspondre, ou une erreur sera levée.
Veuillez noter que les noms de locale sont spécifiques au système d'exploitation, par conséquent la commande précédente pourrait ne pas fonctionner de la même façon partout.
Il n'existe pas d'instruction CREATE DATABASE
dans le standard SQL. Les bases de données sont équivalentes aux
catalogues, dont la création est définie par l'implantation.