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.
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 22.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
(voir Section 23.1.4). La locale
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.
Pour choisir une locale différente de celle de l'instance, utilisez l'option
--locale
. Il existe aussi des options individuelles
--lc-*
et --icu-locale
(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.
Autrement, initdb
peut utiliser la bibliothèque ICU pour
fournir les services de locale en indiquant
--locale-provider=icu
. Le serveur doit être construit avec
le support d'ICU. Pour choisir l'identifiant spécifique de la locale ICU,
utilisez l'option --icu-locale
. Notez que pour des raisons
d'implémentation et pour support le code historique, initdb
sélectionnera et initialisera toujours les paramètres de la locale avec la
libc quand 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 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
(lignes host
et local
).
Voir Section 20.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
#Sélectionne l'encodage des bases de données modèles. Cela sera aussi l'encodage par défaut de toute base créée ultérieurement, sauf si vous surchargez cette configuration. Les jeux de caractères acceptés par le serveur PostgreSQL sont décrits dans Section 23.3.1.
Par défaut, l'encodage de la base modèle est dérivé de la locale. Si
--no-locale
est précisé (ou, de façon
équivalente, si la locale est C
ou
POSIX
), alors le défaut est UTF8
pour le fournisseur ICU et SQL_ASCII
pour le
fournisseur libc
.
-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 la locale ICU quand le fournisseur ICU est utilisé. Le support de la locale est décrit dans Section 23.1.
--icu-rules=règles
#Indique les règles supplémentaires de collation pour personnaliser le comportement de la collation par défaut. Seul ICU l'accepte.
-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 28.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 23.1.
Si --locale-provider
vaut builtin
,
--locale
ou --builtin-locale
doit être
précisé et configuré à C
ou
C.UTF-8
.
--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
.
--builtin-locale=locale
#Précise le nom de la locale quand le fournisseur natif est utilisé. Le support de la locale est décrite dans Section 23.1.
--locale-provider={builtin
|libc
|icu
}
#
Cette option initialise le fournisseur de la locale pour les bases de
données créées dans la nouvelle instance. Elle peut être surchargée
dans la commande CREATE DATABASE
quand de nouvelles
bases sont créées. La valeur par défaut est libc
(voir Section 23.1.4).
--pwfile=nomfichier
#
Incite initdb
à lire le mot de passe du
superutilisateur bootstrap à partir d'un fichier. La première ligne du
fichier est utilisée comme mot de passe.
-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
#
Configure le nom de l'utilisateur défini comme superutilisateur bootstrap.
Par défaut, c'est le nom de l'utilisateur du système d'exploitation
exécutant la commande initdb
.
-W
--pwprompt
#
Force initdb
à demander un mot de passe pour le
superutilisateur bootstrap. 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 :
-c nom
=valeur
--set nom
=valeur
#
Définit de force le paramètre serveur nom
à valeur
pendant initdb
,
et installe aussi ce paramétrage dans le fichier
postgresql.conf
, pour qu'il s'applique sur les
prochaines exécution du serveur. Cette option peut être utilisée plus
d'une fois pour configurer plusieurs paramètres. C'est principalement
utile quand l'environnement empêcherait le serveur de démarrer avec les
paramètres par défaut.
-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.
-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.
-s
--show
#Affiche les configurations internes, puis quitte, sans rien faire de plus. Ceci peut être utilisé pour débugguer l'installation de initdb.
--sync-method=method
#
Quand il est initialisé à fsync
, qui est la valeur
par défaut, initdb
va ouvrir récursivement
tous les fichiers du répertoire de données et les synchroniser sur
disque. La recherche des fichiers suivra les liens symboliques pour
le répertoire des journaux de transactions et chaque tablespace
configuré.
Sur Linux, syncfs
peut être utilisé à la place
pour demander au système d'exploitation de synchroniser les systèmes
de fichiers complets qui contiennent le répertoire des données, les
journaux de transactions et chaque tablespace. Voir
recovery_init_sync_method pour plus d'informations
sur les points importants à connaître lors de l'utilisation de
syncfs
.
Cette option n'a aucun effet quand --no-sync
est
utilisé.
-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
.
D'autres options :
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
.