16.2. Créer un groupe de base de données
Avant de faire quoi que ce soit, vous devez initialiser un
emplacement de stockage pour la base de données. Nous appelons ceci
un groupe de bases de données
(sql utilise le terme de groupe de
catalogues). Un groupe de bases de données est une collection de
bases données et est géré par une seule instance d'un serveur de
bases de données en cours d'exécution. Après initialisation, un
groupe de bases de données contiendra une base de données nommée
postgres, qui a pour but d'être la base de
données par défaut utilisée par les outils, les utilisateurs et les
applications tiers. Le serveur de la base de données lui-même ne
requiert pas la présence de la base de données postgres mais beaucoup d'outils supposent son
existence. Une autre base de données est créée à l'intérieur de
chaque groupe lors de l'initialisation. Elle est appelée template1. comme le nom le suggère, elle sera utilisée
comme modèle pour les bases de données créées après ; elle ne devrait
pas être utilisée pour un vrai travail (voir le Chapitre 19,
Administration des bases de données pour des informations sur la
création de nouvelles bases de données dans le groupe).
En terme de système de fichiers, un groupe de bases de données sera
un simple répertoire sous lequel les données seront stockées. Nous
l'appelons le répertoire de données ou
l'emplacement des données. le choix de cet
emplacement vous appartient complètement. Il n'existe pas de valeur
par défaut bien que les emplacements tels que /usr/local/pgsql/data ou /var/lib/pgsql/data sont populaires. pour initialiser
un groupe de bases de données, utilisez la commande
initdb(1), installée avec PostgreSQL™. l'emplacement désiré sur le
groupe de fichier est indiqué par l'option -d, par exemple
$ initdb -d /usr/local/pgsql/data
Notez que vous devez exécuter cette commande en étant connecté sous
le compte de l'utilisateur PostgreSQL™ décrit dans la section
précédente.
Astuce
Comme alternative à l'option -d, vous
pouvez initialiser la variable d'environnement pgdata.
initdb
tentera de créer
le répertoire que vous avez spécifié si celui-ci n'existe pas déjà.
Il est possible qu'il n'ait pas le droit de le faire (si vous avez
suivi notre conseil et créé un compte sans droits). Dans ce cas, vous
devez créer le répertoire vous-même (en tant que root) et modifier le
propriétaire pour qu'il corresponde à l'utilisateur PostgreSQL™. voici comment réaliser ceci :
root# mkdir /usr/local/pgsql/data
root# chown postgres /usr/local/pgsql/data
root# su postgres
postgres$ initdb -d /usr/local/pgsql/data
initdb
refusera de
s'exécuter si le répertoire des données semble être déjà initialisé.
Comme le répertoire des données contient toutes les données stockées
par le système de bases de données, il est essentiel qu'il soit
sécurisé par rapport à des accès non autorisés. Du coup,
initdb
supprimera les droits
d'accès à tout le monde sauf l'utilisateur PostgreSQL™.
Néanmoins, bien que le contenu du répertoire soit sécurisé, la
configuration d'authentification du client par défaut permet à tout
utilisateur local de se connecter à la base de données et même à
devenir le super-utilisateur de la base de données. Si vous ne faites
pas confiance aux utilisateurs locaux, nous vous recommandons
d'utiliser une des options -w ou --pwprompt de la commande
initdb
pour affecter un mot de
passe au super-utilisateur de la base de données.. de plus, spécifiez
-a md5 ou -a
mot_de_passe de façon à ce que la méthode d'authentification
trust par défaut ne soit pas utilisée ; ou
modifiez le fichier pg_hba.conf généré
après l'exécution d'
initdb
(d'autres approches
raisonnables incluent l'utilisation de l'authentification ident ou les droits du système de fichiers pour
restreindre les connexions. Voir le Chapitre 20,
Authentification du client pour plus d'informations).
initdb
initialise aussi
la locale par défaut du groupe de bases de données. Normalement, elle
prends seulement le paramétrage local dans l'environnement et
l'applique à la base de données initialisée. Il est possible de
spécifier une locale différente pour la base de données ; la
Section 21.1, « Support
des locales » propose plus d'informations là-dessus. L'ordre
de tri utilisé à l'intérieur du groupe de bases de données est
initialisé par
initdb
et ne peut pas être modifié après, en dehors de la sauvegarde des
données, du redémarrage de
initdb
et du rechargement des
données. il y a aussi un impact sur les performances lors de
l'utilisation de locales autres que c ou
posix. du coup, il est important de faire ce
choix correctement la première fois.
initdb
configure aussi
le codage par défaut de l'ensemble de caractères pour le groupe de
bases de données. Normalement, cela doit été choisi pour correspondre
au paramétrage de la locale. Pour les détails, voir la Section 21.2,
« Support des jeux de caractères ».