CREATE DATABASE

Nom

CREATE DATABASE -- crée une nouvelle base de données

Synopsis

CREATE DATABASE nom
    [ [ WITH ] [ OWNER [=] propriétaire ]
           [ LOCATION [=] 'chemin' ]
           [ TEMPLATE [=] modèle ]
           [ ENCODING [=] encodage ] ]

Description

CREATE DATABASE crée une nouvelle base de données PostgreSQL.

Pour créer une base de données, vous devez être super-utilisateur ou avoir le droit spécial CREATEDB. Regardez CREATE USER.

Normalement, le créateur devient le propriétaire de la nouvelle base. Les superutilisateurs peuvent créer des bases dont le propriétaire sera un autre utilisateur en utilisant la clause OWNER. Ils peuvent même créer des bases qui appartiendront à des utilisateurs qui n'ont aucun droits spéciaux. Les utilisateurs qui ne sont pas superutilisateurs mais qui possèdent le privilège CREATEDB peuvent seulement créer des bases de données dont ils seront les propriétaires.

Un emplacement alternatif peut être spécifié afin, par exemple, de stocker la base de données sur un disque différent. Le chemin doit avoir été préparé avec la commande initlocation.

Si le nom du chemin ne contient pas de barre oblique (slash), il est interprété comme le nom d'une variable d'environnement qui doit être connue du processus serveur. De cette façon, l'administrateur de bases de données peut exercer un contrôle sur les emplacements dans lesquels les bases sont créées. (Un choix personnalisé est, par exemple, PGDATA2.) Si le serveur est compilé avec ALLOW_ABSOLUTE_DBPATHS (non positionné par défaut), le nom des chemins absolus, identifiés par une barre oblique au début (par exemple /usr/local/pgsql/data), sont aussi autorisés. Dans l'un ou l'autre cas, le nom final du chemin doit être absolu et ne doit contenir aucun guillemet simple.

Par défaut, la nouvelle base de données sera créée en clonant la base système standard template1. Un modèle différent peut être spécifié en écrivant TEMPLATE nom. En particulier, en écrivant TEMPLATE template0, vous pouvez créer une base de données vierge contenant seulement les objets standards pré-définis par votre version de PostgreSQL. Ceci est utile si vous souhaitez éviter de copier les objets de l'installation locale qui ont pû être ajoutés à template1.

Le paramètre optionel d'encodage permet de sélectionner l'encodage de la base de données. Quand il n'est pas spécifié, l'encodage utilisé sera celui du modèle de base de donnée choisi.

Paramètres

nom

Le nom de la base de données à créer.

propriétaire

Un nom d'utilisateur de la base qui sera le propriétaire de la nouvelle base de données ou DEFAULT pour utiliser l'option par défaut (c'est-à-dire utiliser le nom de l'utilisateur qui exécute la commande).

chemin

Un emplacement alternatif du système de fichiers dans lequel stocker la nouvelle base de données, spécifié par une chaîne de caractères, ou DEFAULT pour utiliser l'emplacement par défaut.

modèle

Le nom du modèle depuis lequel créer la nouvelle base de données ou DEFAULT pour utiliser le modèle par défaut (template1).

encodage

Jeu d'encodage à utiliser par la nouvelle base de données. Spécifiez une chaîne (par exemple 'SQL_ASCII'), un nombre d'encodage de type entier ou DEFAULT pour utiliser l'encodage par défaut.

Les paramètres optionnels peuvent être écrits dans n'importe quel ordre, pas seulement l'ordre illustré au-dessus.

Notes

CREATE DATABASE ne peut pas être exécuté à l'intérieur d'un bloc de transactions.

Les erreurs suivants la ligne << could not initialize database directory >> (ne peut pas initialiser le répertoire de la base de données) sont le plus souvent dûes à des droits insuffisants sur le répertoire de données, à un disque plein ou à un autre problème du système de fichiers. Lors de l'emploi d'un emplacement alternatif, l'utilisateur sous lequel le serveur de bases de données fonctionne doit avoir accès à cet emplacement.

Utilisez l'instruction DROP DATABASE pour supprimer la base de données.

Le programme createdb est un emballage autour de cette commande. Il est fourni pour la convenance.

Il existe des problèmes de sécurité soulevés lors de l'utilisation d'un nom de chemin absolu pour l'emplacement alternatif de la base de donnée ; c'est la raison pour laquelle cette fonctionnalité n'est pas activée par défaut. Regardez la Section 18.5 pour plus d'informations.

Bien qu'il soit possible de copier une base de données autre que template1 en spécifiant son nom comme modèle, ceci n'est pas (encore) prévu comme un service << COPY DATABASE >> d'usage général. Nous recommandons que les bases de données utilisées comme modèles soient en mode lecture seule. Regardez la Section 18.3 pour plus d'informations.

Exemples

Pour créer une nouvelle base de données :

CREATE DATABASE lusiadas;

Pour créer une nouvelle base de données dans l'emplacement alternatif ~/private_db, exécutez ce qui suit depuis un shell :

mkdir private_db
initlocation ~/private_db

Ensuite exécutez ce qui suit depuis une session de psql :

CREATE DATABASE ailleurs WITH LOCATION '/home/olly/private_db';

Compatibilité

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 lors de l'implémentation.