initdb — Créer un nouveau « cluster »
initdb [option...] [ --pgdata | -D ] répertoire
initdb crée une nouvelle grappe de bases de données, ou « cluster », PostgreSQL™. Un cluster est un ensemble de bases de données gérées par une même instance du serveur.
Créer un cluster consiste à :
créer les répertoires dans lesquels sont stockées les données de la base ;
créer les tables partagées du catalogue (tables partagées par tout le cluster) ;
créer les bases de données template1 et postgres.
Lors de la création ultérieure d'une base de données, tout ce qui se trouve dans la base template1 est copié. (Ce qui implique que tout ce qui est installé dans template1 est automatiquement copié dans chaque base de données créée par la suite.) La base de données postgres est une base de données par défaut à destination des utilisateurs, des outils et des applications tiers.
initdb tente de créer le répertoire de données indiqué. Il se peut que la commande n'est pas les droits nécessaires si le répertoire parent du répertoire de données indiqué est possédé par root. Dans ce cas, pour réussir l'initialisation, il faut créer un répertoire de données vide en tant que root, puis utiliser chown pour en donner la possession au compte utilisateur de la base de données. su peut alors être utilisé pour prendre l'identité de l'utilisateur de la base de données et exécuter initdb.
initdb doit être exécuté par l'utilisateur propriétaire du processus serveur parce que le serveur doit avoir accès aux fichiers et répertoires créés par initdb. Comme le serveur ne peut pas être exécuté en tant que root, il est impératif de ne pas lancer initdb en tant que root. (En fait, initdb refuse de se lancer dans ces conditions.)
initdb initialise la locale et l'encodage de jeu de caractères par défaut du cluster. L'encodage du jeu de caractères, l'ordre de tri (LC_COLLATE) et les classes d'ensembles de caractères (LC_CTYPE, c'est-à-dire majuscule, minuscule, chiffre) peuvent être configurés séparément pour chaque base de données à sa création. initdb détermine ces paramètres à partir de la base de données template1 qui servira de valeur par défaut pour toutes les autres bases de données.
Pour modifier l'ordre de tri ou les classes de jeu de caractères par défaut, utilisez les options --lc-collate et --lc-ctype. Les ordres de tri autres que C et POSIX ont aussi un coût en terme de performance. Pour ces raisons, il est important de choisir la bonne locale lors de l'exécution d'initdb.
Les catégories de locale restantes peuvent être modifiées plus tard, lors du démarrage du serveur. Vous pouvez aussi utiliser --locale pour configurer les valeurs par défaut de toutes les catégories de locale, ceci incluant l'ordre de tri et les classes de jeu de caractères. Toutes les valeurs de locale côté serveur (lc_*) peuvent être affichées via la commande SHOW ALL. Il y a plus d'informations sur ce point sur Section 23.1, « Support des locales ».
Pour modifier l'encodage par défaut, utilisez l'option --encoding. Section 23.3, « Support des jeux de caractères » propose plus d'options.
Précise la méthode d'authentification utilisée dans pg_hba.conf pour les utilisateurs locaux (lignes host et local). N'utilisez jamais trust à moins que vous ne fassiez confiance à tous les utilisateurs locaux de votre système. trust reste toutefois la valeur par défaut pour simplifier une installation.
Cette option spécifie la méthode d'authentification pour les utilisateurs définis dans le fichier pg_hba.conf et qui peuvent se connecter localement via une connexion TCP/IP (lignes host).
Cette option spécifie la méthode d'authentification pour les utilisateurs définis dans le fichier pg_hba.conf et qui peuvent se connecter localement via une socket de domaine Unix (lignes local).
Indique le répertoire de stockage de la grappe de bases de données. C'est la seule information requise par initdb. Il est possible d'éviter de préciser cette option en configurant la variable d'environnement PGDATA. Cela permet, de plus, au serveur de bases de données (postgres) de trouver le répertoire par cette même variable.
Définit l'encodage de la base de données modèle (template). C'est également l'encodage par défaut des bases de données créées ultérieurement. Cette valeur peut toutefois être surchargée. La valeur par défaut est déduite de la locale. Dans le cas où cela n'est pas possible, SQL_ASCII est utilisé. Les jeux de caractères supportés par le serveur PostgreSQL™ sont décrits dans Section 23.3.1, « Jeux de caractères supportés ».
Utilise des sommes de contrôle sur les pages de données pour aider à la détection d'une corruption par le système en entrée/sortie qui serait autrement passée sous silence. Activer les sommes de contrôle peut causer une pénalité importante sur les performances. Cette option peut seulement être configurée lors de l'initialisation, et ne peut pas être modifiée après coup. Si elle est activée, les sommes de contrôle sont calculées pour tous les objets de chaque base de données.
Configure la locale par défaut pour le cluster. Si cette option n'est pas précisée, la locale est héritée de l'environnement d'exécution d'initdb. Le support des locales est décrit dans Section 23.1, « Support des locales ».
Même principe que --locale, mais seule la locale de la catégorie considérée est configurée.
Équivalent à --locale=C.
Par défaut, initdb attendra que tous les fichiers soient correctement écrit sur disque. Cette option permet à initdb de quitter sans attendre, ce qui est plus rapide, mais ce qui signifie aussi qu'un crash du système d'exploitation immédiatement après peut aboutir à une corruption du répertoire des données. Cette option n'est réellement utile que pour les tests et ne devrait pas être utilisée lors de la mise en place d'un serveur en production.
Incite initdb à lire le mot de passe du superutilisateur à partir d'un fichier. La première ligne du fichier est utilisée comme mot de passe.
Écrit en toute sécurité tous les fichiers de la base sur disque, puis quitte. Ceci ne réalise aucune des opérations normales d'initdb.
Définit la configuration par défaut pour la recherche de texte. Voir default_text_search_config pour de plus amples informations.
Précise le nom de l'utilisateur défini comme superutilisateur de la base de données. Par défaut, c'est le nom de l'utilisateur qui lance initdb. Le nom du superutilisateur importe peu, mais postgres peut être conservé, même si le nom de l'utilisateur système diffère.
Force initdb à demander un mot de passe pour le superutilisateur de la base de données. Cela n'a pas d'importance lorsqu'aucune authentification par mot de passe n'est envisagée. Dans le cas contraire, l'authentification par mot de passe n'est pas utilisable tant qu'un mot de passe pour le superutilisateur n'est pas défini.
Définit le répertoire de stockage des journaux de transaction.
D'autres options, moins utilisées, sont disponibles :
Affiche les informations de débogage du processus amorce et quelques autres messages de moindre intérêt pour le grand public. Le processus amorce est le programme qu'initdb lance pour créer les tables catalogues. Cette option engendre une quantité considérable de messages ennuyeux.
Indique à initdb où trouver les fichiers d'entrée nécessaires à l'initialisation du cluster. En temps normal, cela n'est pas nécessaire. Un message est affiché lorsque leur emplacement doit être indiqué de manière explicite.
Par défaut, lorsqu'initdb rencontre une erreur qui l'empêche de finaliser la création du cluster, le programme supprime tous les fichiers créés avant l'erreur. Cette option désactive le nettoyage. Elle est utile pour le débogage.
D'autres options :
Affiche la version de initdb puis quitte.
Affiche l'aide sur les arguments en ligne de commande de initdb, puis quitte
Indique le répertoire de stockage de la grappe de bases de données ; peut être surchargé avec l'option -D.
Précise le fuseau horaire par défaut de l'instance. Cette valeur doit être un nom complet de fuseau horaire (voir Section 8.5.3, « Fuseaux horaires »).
Cet outil, comme la plupart des autres outils PostgreSQL™, utilise aussi les variables d'environnement supportées par la bibliothèque libpq (voir Section 32.14, « Variables d'environnement »).