Il existe un grand nombre de paramètres de configuration affectant le
comportement du système de bases de données. Dans la première section
de ce chapitre, les méthodes de configuration de ces paramètres sont
décrites ; les sections suivantes discutent de chaque paramètre en
détail.
17.1. Paramètres de configuration
Tous les noms de paramètres sont insensibles à la casse. Chaque
paramètre prend une valeur d'un de ces quatre types : booléen,
entier, nombre à virgule flottante ou chaîne de caractères. Les
unités par défaut peuvent être récupérées en référençant pg_settings.unit. Les valeurs booléennes peuvent
être ON, OFF,
TRUE, FALSE,
YES, NO,
1, 0 ou tout
préfixe non ambigu de ceux-ci (toutes ces écriture sont insensibles
à la casse).
Certains paramètres indiquant une valeur de taille mémoire ou de
durée. Ils ont chacun une unité implicite, soit Ko, soit blocs
(typiquement 8 Ko), soit millisecondes, soit secondes, soit
minutes. Pour simplifier la saisie, une unité différente peut être
indiquée de façon explicite. Les unités mémoire valides sont
kB (kilo-octets), MB (Méga-octets) et GB
(Giga-octets) ; les unités de temps valides sont ms (millisecondes), s
(secondes), min (minutes), h (heures), and d (jours).
Les unités de mémoire sont des multiples de 1024, pas de 1000.
Une façon d'initialiser ces paramètres est d'éditer le fichier
postgresql.conf qui est normalement placé
dans le répertoire data (initdb y
installe une copie par défaut). Un exemple de son contenu peut être
:
# Ceci est un commentaire
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB
Un paramètre est indiqué par ligne. Le signe égal entre le nom et
la valeur est optionnel. Les espaces n'ont pas de signification et
les lignes vides sont ignorées. Les marques de hachage (#) introduisent des commentaires. Les valeurs des
paramètres qui ne sont pas des identifieurs simples ou des nombres
doivent être placées entre guillemets simples. Pour intégrer un
guillemet simple dans la valeur d'un paramètre, on écrit soit deux
guillemets (c'est la méthode préférée) soit un antislash suivi du
guillemet.
En plus de la configuration des paramètres, le fichier postgresql.conf peut contenir des directives d'inclusion indiquant un autre fichier
à lire et dont le contenu doit être traité à ce niveau comme partie
intégrante du fichier de configuration. Les directives d'inclusion
ressemblent simplement à
include 'nom_fichier'
Si le nom du fichier n'est pas un chemin absolu, il est pris comme
relatif au répertoire contenant le fichier de configuration le
référençant. Les inclusions peuvent être imbriquées.
Le fichier de configuration est relu à chaque fois que le processus
serveur principal reçoit un signal SIGHUP (pg_ctl reload
est le moyen le plus simple de l'envoyer). Le processus serveur
principal propage aussi ce signal aux processus serveur en cours
d'exécution de façon à ce que les sessions existantes obtiennent
aussi la nouvelle valeur. Il est également possible d'envoyer le
signal directement à un seul processus serveur. Quelques paramètres
ne peuvent être initialisés qu'au lancement du serveur ; tout
changement de leur valeur dans le fichier de configuration est
ignoré jusqu'au prochain démarrage du serveur.
Une autre façon de configurer ces paramètres est de les passer
comme option de la commande
postgres
:
postgres -c log_connections=yes -c log_destination='syslog'
Les options de la ligne de commande surchargent le paramétrage
effectué dans le fichier postgresql.conf.
Ce qui signifie que la valeur d'un paramètre passé en ligne de
commande ne peut plus être modifiée et rechargée à la volée par le
fichier postgresql.conf. C'est pourquoi,
bien que la méthode de la ligne de commande paraisse pratique, elle
peut coûter en flexibilité par la suite.
Il est parfois utile de donner une option en ligne de commande pour
une unique session particulière. La variable d'environnement
PGOPTIONS est utilisée côté client à ce
propos :
env PGOPTIONS='-c geqo=off' psql
(Ceci fonctionne pour toute application client fondée sur
libpq, et non pas seulement pour
psql.) Cela ne fonctionne pas pour
les paramètres fixés au démarrage du serveur ou qui doivent être
précisés dans postgresql.conf.
De plus, il est possible d'affecter un ensemble de paramètres à un
utilisateur ou à une base de données. Quand une session est lancée,
les paramètres par défaut de l'utilisateur et de la base de données
impliqués sont chargés. Les commandes ALTER USER et ALTER
DATABASE sont respectivement utilisées pour configurer ces
paramètres. Les paramètres par base de données surchargent ceux
passés sur la ligne de commande de
postgres
ou du fichier de
configuration et sont à leur tour surchargés par ceux de
l'utilisateur ; les deux sont surchargés par les paramètres de
session.
Quelques paramètres peuvent être modifiés dans les sessions
SQL individuelles avec la
commande SET,
par exemple :
SET ENABLE_SEQSCAN TO OFF;
Si
SET
est autorisé,
il surcharge toutes les autres sources de valeurs pour le
paramètre. Quelques paramètres ne peuvent pas être changés via
SET
: s'ils
contrôlent un comportement qui ne peut pas être modifié sans
relancer le serveur PostgreSQL™, par exemple. De plus,
quelques paramètres peuvent être modifiés via
SET
ou
ALTER
par les superutilisateurs,
mais pas par les utilisateurs ordinaires.
La commande SHOW permet d'inspecter les valeurs courantes de tous
les paramètres.
La table virtuelle pg_settings
(décrite dans la Section 43.44,
« pg_settings »)
autorise aussi l'affichage et la mise à jour de paramètres de
session à l'exécution. Elle est équivalente à
SHOW
et
SET
mais peut être plus facile à
utiliser parce qu'elle peut être jointe avec d'autres tables et que
ses lignes peuvent être sélectionnées en utilisant des conditions
personnalisées.