PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 15.9 » Référence » Applications relatives au serveur PostgreSQL » initdb

initdb

initdb — Créer un nouveau « cluster / instance »

Synopsis

initdb [option...] [ --pgdata | -D ] répertoire

Description

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 postgres, template1 et template0. La base de données postgres est une base de données par défaut à destination des utilisateurs, des outils et des applications tiers. template1 et template0 sont des bases de données servant de source pour la copie réalisée par des commandes CREATE DATABASE. template0 ne doit jamais être modifié mais vous pouvez ajouter des objets à template1, qui, par défaut, sera copiée dans toutes les bases créées ultérieurement. Voir Section 23.3 pour plus de détails.

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. Ils peuvent aussi être configurés séparément pour chaque base lors de leur création. initdb détermine ces paramètres pour les bases modèles servant de défaut pour toutes les autres bases. Par défaut, initdb utilise le fournisseur local libc, utilise les paramètres de la locale de l'environnement système, et détermine l'encodage à partir des paramètres de la locale. C'est est généralement suffisant, sauf s'il y a des besoins spéciaux.

Pour choisir une locale différente de celle de l'instance, utilisez l'option --locale. Il existe aussi des options individuelles --lc-* (voir ci-dessous) pour configurer les valeurs pour les catégories individuelles des locales. Notez que des paramètres incohérents pour des catégories différentes de locale peuvent donner des résultats insensés, donc c'est à utiliser avec prudence.

Il existe une alternative, la bibliothèque ICU, qui peut être utilisée pour fournir des services pour la locale. (Encore une fois, ceci configure seulement la valeur par défaut pour les bases de données créées par la suite.) Pour sélectionner cette option, indiquez --locale-provider=icu. Pour choisir l'identifiant ICU de la locale spécifique à appliquer, utilisez l'option --icu-locale. Notez que pour des raisons d'implémentation et pour supporter le code existant, initdb sélectionnera et initialisera les paramètres de locale en utilisant la bibliothèque C même si le fournisseur de locale ICU est utilisé.

Lors de l'exécution d'initdb, cette commande affichera les paramètres de la locale qu'elle a choisi. Si vous avez des besoins complexes ou si vous spécifiez plusieurs options, il est conseillé de vérifier que le résultat corresponde à la locale attendue.

Pour plus de détails sur la configuration de la locale, voir Section 24.1.

Pour modifier l'encodage par défaut, utilisez l'option --encoding. Section 24.3 propose plus d'options.

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 (lignes host et local). Voir Section 21.1 pour un aperçu des valeurs valides.

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 des bases de données modèles (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 si le fournisseur libc est utilisé, ou UTF8 si le fournisseur ICU est utilisé. Les jeux de caractères supportés par le serveur PostgreSQL sont décrits dans Section 24.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.

--icu-locale=locale

Indique l'identifiant de la locale ICU si le fournisseur de locale ICU est utilisé.

-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. Voir Section 30.2 pour les détails.

--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 24.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.

--locale-provider={libc|icu}

Cette option configure le fournisseur de locale pour les bases de données créées dans la nouvelle instance. Il peut être surchargé dans la commande CREATE DATABASE quand de nouvelles bases sont créées par la suite. La valeur par défaut est libc.

-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.

--no-instructions

Par défaut, initdb écrira les instructions de lancement de l'instance à la fin de son exécution. Cette option permet de ne pas afficher ces instructions. Ceci a principalement pour cible les outils qui font appel à initdb et pour qui ces instructions ont des chances d'être erronées.

--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. Habituellement, cette option est utile pour s'assurer une restauration fiable après la modification de fsync de off à on.

-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.

--discard-caches

Exécute le processus bootstrap avec l'option debug_discard_caches=1. Ceci prend beaucoup de temps et doit seulement être utilisé pour des séances de débugage intense.

-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

Environnement

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).

Notes

initdb peut aussi être appelé avec pg_ctl initdb.