initdb — Créer un nouveau « cluster / instance »
initdb
[option
...] [ --pgdata
| -D
] répertoire
initdb
crée une nouvelle instance 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 une instance consiste à créer les répertoires dans lesquels sont
stockées les données, créer les tables partagées du catalogue (tables
partagées par toute l'instance, et non pas spécifique à une base), et 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é (de ce fait, 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.)
Pour des raisons de sécurité, la nouvelle instance créée par
initdb
sera seulement accessible par défaut par le
propriétaire de l'instance. L'option --allow-group-access
permet à tout utilisateur du même groupe que le propriétaire de l'instance
de lire les fichiers de l'instance. Ceci est utile pour réaliser des
sauvegardes en tant qu'utilisateur non privilégié.
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.
Pour modifier l'encodage par défaut, utilisez l'option
--encoding
. Section 23.3 propose plus
d'options.
-A méthode_auth
--auth=méthode_auth
Cette option spécifie la méthode d'authentification par défaut pour
les utilisateurs locaux utilisée dans pg_hba.conf
(host
et local
lines).
initdb
pré-remplira les entrées de
pg_hba.conf
en utilisant la méthode
d'authentification spécifiée pour les connexions qui ne sont pas pour
la réplication aussi bien que pour les connexions de réplication.
N'utilisez pas trust
à moins que vous ne fassiez
entièrement confiance à tous les utilisateurs locaux sur votre
système. trust
est utilisé par défaut pour
faciliter l'installation.
--auth-host=méthode_auth
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
).
--auth-local=méthode_auth
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
).
-D répertoire
--pgdata=répertoire
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.
-E codage
--encoding=codage
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.
-g
--allow-group-access
Autorise les utilisateurs du même groupe que le propriétaire de
l'instance à lire tous les fichiers de l'instance créés par
initdb
. Cette option est ignorée sur
Windows car ce système ne supporte pas les
droits de groupe du style POSIX.
-k
--data-checksums
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. Si elle est activée, les sommes de contrôle sont calculées pour tous les objets de chaque base de données. Tous les échecs lors des vérifications des sommes de contrôle seront rapportés dans la vue pg_stat_database.
--locale=locale
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.
--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
Même principe que --locale
, mais seule la locale de la
catégorie considérée est configurée.
--no-locale
Équivalent à --locale=C
.
-N
--no-sync
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.
--pwfile=nomfichier
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.
-S
--sync-only
É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.
-T config
--text-search-config=config
Définit la configuration par défaut pour la recherche de texte. Voir default_text_search_config pour de plus amples informations.
-U nomutilisateur
--username=nomutilisateur
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.
-W
--pwprompt
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.
-X répertoire
--waldir=répertoire
Définit le répertoire de stockage des journaux de transactions.
--wal-segsize=size
Configure la taille d'un segment WAL en mégaoctets. C'est la taille d'un fichier individuel des journaux de transactions. La taille par défaut est de 16 Mo. La valeur doit être une puissance de 2 entre 1 et 1024 (mégaoctets). Cette option est seulement configurable au moment de l'initialisation. Elle ne peut plus être changée après.
Il pourrait être utile d'ajuster cette taille pour contrôler la granularité de la copie ou de l'archivage des journaux de transactions. De plus, dans les bases à gros volumes d'écritures, le grand nombre de fichiers de journaux de transactions par répertoire peut devenir un problème de performance et de gestion. Augmenter la taille des fichiers WAL réduira le nombre de fichiers WAL.
D'autres options, moins utilisées, sont disponibles :
-d
--debug
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.
-L répertoire
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.
-n
--no-clean
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 :
-V
--version
Affiche la version de initdb puis quitte.
-?
--help
Affiche l'aide sur les arguments en ligne de commande de initdb, puis quitte
PGDATA
Indique le répertoire de stockage de la grappe de bases de
données ; peut être surchargé avec l'option -D
.
PG_COLOR
Indique s'il faut utiliser la couleur dans les messages de diagnostic.
Les valeurs possibles sont always
,
auto
, never
.
TZ
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).
initdb
peut aussi être appelé avec pg_ctl
initdb
.