CREATE DATABASE

Name

CREATE DATABASE  --  Crée une nouvelle base.

Synopsis

CREATE DATABASE name
    [ WITH [ LOCATION = 'dbpath' ]
           [ TEMPLATE = template ]
           [ ENCODING = encoding ] ]
  

Entrées

name

Nom de la base à créer.

dbpath

Une localisation de fichier système différente dans lequel on stocke la nouvelle base, spécifié comme chaîne littérale; ou DEFAULT pour utiliser la localisation par défaut.

template

Nom de gabarit sepuis lequel on crée la nouvelle base, ou DEFAULT pour utiliser la gabarit par défaut (template1).

encoding

Méthode d'encodage multi-octet à utiliser dans la nouvelle base. Spécifie un nom de chaîne littérale (ex., 'SQL_ASCII'), ou un nombre d'encodage entier, ou DEFAULT pour utiliser l'encodage par défaut.

Sorties

CREATE DATABASE

Message retourné si la commande est exécutée correctement.

ERROR: user 'username' is not allowed to create/drop databases

Vous devez avoir le privilège spécial CREATEDB pour créer des bases. Voir CREATE USER.

ERROR: createdb: database "name" already exists

Ceci s'affiche si le name spécifié existe déja.

ERROR: database path may not contain single quotes

La localisation de la base dbpath ne contient pas de simples guillemets. Ce qui est nécessaire pour que les commandes shell qui créent le répertoire de la base puissent s'exécuter en sécurité.

ERROR: CREATE DATABASE: may not be called in a transaction block

Si vous avez un bloc de transaction en cours vous ne pouvez appeler CREATE DATABASE. Vous devez finir la transaction d'abord.

ERROR: Unable to create database directory 'path'., ERROR: Could not initialize database directory.

C'est la plupart du temps en rapport avec des permissions insuffisantes sur le répertoire des données, un disque plein, ou autre problème de système de fichiers. L'utilisateur sous lequel le serveur de la base tourne doit avoir accès au site.

Description

CREATE DATABASE crée une nouvelle base PostgreSQL. Le créateur devient le propriètaire de la nouvelle base.

Un site différent peut être spécifié afin de, par exemple, stocker la base sur des disques différents. Le chemin doit avoir été préparé avec la commande initlocation.

Si le nom de chemin ne contient pas de slash (/), il est interprété comme un nom de variable d'environnement, lequel doit être connu du processus serveur. Par ce moyen l'administrateur de la base peut exercer un contrôle sur les sites sur lesquels les bases peuvent être créées. (Un choix habituel est, ex., PGDATA2). Si le serveur est compilé avec ALLOW_ABSOLUTE_DBPATHS (ce n'est pas le cas par défaut), des noms de chemin absolus, identifiés par un slash d'en-tête (ex., /usr/local/pgsql/data), sont également admis.

Par défaut, la nouvelle base sera créée par clonage de la base système standard template1. Un gabarit différent peut être spécifié en écrivant TEMPLATE = name. En particulier, en écrivant TEMPLATE = template0, vous pouvez créer une base vierge contenant seulement les objets standards pré définis par votre version de PostgreSQL. Ceci est pratique si vous voulez éviter de copier tous les objets de l'installation locale qui ont été ajoutés à template1.

Le paramètre optionnel d'encodage permet la sélection de l'encodage de la base, si votre serveur a été compilé avec le support de l'encodage multi-octet. Si rien n'est spécifié, l'encodage par défaut est utilisé par le gabarit sélectionné de la base.

Des paramètres optionnels peuvent être écrits dans n'importe quel ordre, pas uniquement l'ordre indiqué ci-dessus.

Notes

CREATE DATABASE est une extension du langage PostgreSQL.

Utilisez DROP DATABASE pour supprimer une base.

Le programme createdb est un script shell enveloppant cette commande, fourni par commodité.

Il existe des problèmes de sécurité et d'intégrité des données en utilisant des bases distantes spécifiées par un chemin absolu, et par défaut seulement une variable d'environnement connue par le serveur peut être spécifiée pour une localisation distante. Voir le guide de l'administrateur pour plus d'information.

Bien qu'il soit possible de copier une base autre que template1 en spécifiant son nom comme gabarit, ce n'est pas (encore) le cas de la fonctionnalité COPY DATABASE. Nous recommendons que les bases utilisées comme gabarit soient traitées en lecture seule. Voir le Guide de l'administrateur pour plus d'information.

Utilisation

Pour créer une nouvelle base :

olly=> create database lusiadas;
   

Pour créer une nouvelle base dans un endroit différent ~/private_db:

$ mkdir private_db
$ initlocation ~/private_db
    The location will be initialized with username "olly".
This user will own all the files and must also own the server process.
Creating directory /home/olly/private_db
Creating directory /home/olly/private_db/base

initlocation is complete.
    
   
$ psql olly
Welcome to psql, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

olly=> CREATE DATABASE elsewhere WITH LOCATION = '/home/olly/private_db';
CREATE DATABASE
   

Compatibilité

SQL92

Il n'existe pas de CREATE DATABASE en SQL92. Les bases sont équivalentes aux catalogues dont la création est définie par l'implémentation.