17. Configuration du serveur

17.1. Paramètres de configuration
17.2. Emplacement des fichiers
17.3. Connexions et authentification
17.4. Consommation des ressources
17.5. Write Ahead Log
17.6. Planification des requêtes
17.7. Remonter et tracer les erreurs
17.8. Statistiques d'exécution
17.9. Nettoyage automatique
17.10. Valeurs par défaut des connexions client
17.11. Gestion des verrous
17.12. Compatibilité de version et de plateforme
17.13. Options préconfigurées
17.14. Options personnalisées
17.15. Options pour les développeurs
17.16. Options courtes

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.