Configuration de PostgreSQL

Formation administration PostgreSQL
Logo de PostgreSQL Représentation imagée de la configuration de PostgreSQL

Configuration de PostgreSQL

Configurer un cluster

Par exemple pour permettre des fonctionnements simultanés de clusters indépendants il faudra leur préciser des numéros de port TCP différents. Le numéro port est indiqué dans le fichier postgresql.conf situé à priori à la racine du cluster. Par défaut le port 5432 est utilisé.

Le fichier pg_hba.conf

le nom de ce fichier vient de l'acronyme de Host Based Authentification.

Le mécanisme des ACL est présent dans de nombreux systèmes informatiques, on le retrouve par exemple dans les annuaires LDAP ou encore dans les systèmes de fichier UNIX avec les ACL POSIX.

Le fichier pg_hba.conf

Les sockets UNIX indiquent un point d'accès via le système de fichiers. le fichier est de type socket et est préfixé par un s lors d'un ls -la. Le client psql accepte une indication d'adresse de connexion, si celle-ci correspond à un répertoire, celui-ci sera utilisé pour localiser le fichier de socket qui devra être de la forme .s.PGSQL.num_port.

Les adresses IP pourront correspondre à des machines ou à des réseaux. On devra utiliser indifféremment l'une des notation avec masque ou en format CIDR, en IPv4 comme en IPv6.

Le fichier pg_hba.conf

Il existe un grand nombre de modes d'authentification, certains sont à éviter tel que password qui véhicule en clair les mots de passe sur le réseau. La liste complète est accessible à http://docs.postgresql.fr/current/client-authentication.html

Le fichier pg_hba.conf

Comme l'illustre cet exemple, il est également possible d'indiquer un réseau par son nom de domaine préfixé de . ou une machine par son nom.

Un utilisateur peut être indiqué par son appartenance à un groupe, dans ce cas il sera préfixé par un +. Nous verrons plus tard la gestion des utilisateurs et des rôles pour permettre cette appartenance.

En cas d'authentification via Ldap il faudra fournir les paramètres d'accès à l'annuaire par ldapserver=ip serveur, ldapprefix=le prefixe, ldapsuffix=le suffixe...

Le fichier pg_ident.conf

Ce mécanisme ne peut être pris en compte que pour les utilisateurs du système d'exploitation, c'est à dire ceux qui seront identifiables par le service d'identification (sous Unix c'est le service auth disponible au port 113/TCP) ou encore par le module d'authentification pam. Le service d'auhentification peut être lancé à partir du paquet oidentd.

Cette technique impose toutefois qu'un utilisateur indique le nom qu'il veut utiliser, en revanche aucune demande d'authentification ne sera réalisée pour prendre une identité dont la correspondance est assurée par la map visée dans le fichier pg_ident.conf.

le fichier pg_ident.conf

Le fichier pg_ident.conf

On remarque que l'utilisateur système test peut se connecter sans mot de passe en tant qu'utilisateur système usera sous réserve qu'il soit déjà authentifié. Ceci aurait également été vrai pour tout autre utilisateur reconnu par PostgreSQL.

En mode ident ce mécanisme n'est opérationnel que si le serveur d'identification est actif, ce qui n'est pas toujours vrai !

Le fichier postgresql.conf

Les lignes de ce fichier présentent des variables avec des valeurs associées. Une ligne commençant par # indique un commentaire. Dans la plupart des installations de PostgreSQL l'ensemble des paramètres est présent sous forme de lignes commentées, avec comme valeur associée la valeur utilisée par défaut.

Nos serons amenés à modifier des paramètres dans ce fichier tout au long de cette formation d'administration de PostgreSQL.

Localisation de la configuration

Les distributions Linux/Debian utilisent cette technique de relocalisation de la configuration en positionnant les arborescences contenant postgresql.conf selon des chemins du type /etc/postgresql/version/main/.

La table pg_settings

Pour localiser rapidement le fichier de configuration principal (nommé postgresql.conf) nous disposons du champ config_file (en lecture seule). Aussi les commandes suivantes permettent de localiser tous les éléments de la configuration :

SHOW config_file;
               config_file                
------------------------------------------
 /etc/postgresql/9.6/main/postgresql.conf
(1 ligne)
SHOW data_directory;
        data_directory        
------------------------------
 /var/lib/postgresql/9.6/main
(1 ligne)
SHOW hba_file;
               hba_file               
--------------------------------------
 /etc/postgresql/9.6/main/pg_hba.conf
(1 ligne)
SHOW ident_file;
               ident_file               
----------------------------------------
 /etc/postgresql/9.6/main/pg_ident.conf
(1 ligne)

On voit dans cette configuration que les chemins ont été modifiés (système DEBIAN).

La table pg_settings

Colonnes de la table pg_settings
nom de la colonnedescription
namenom du paramètre de configuration
settingvaleur courante
unitunité (si applicable)
categorysection de configuration : log, autovacuum, ...
short_descdescription courte
extra_descdescription longue
contextcontexte de mise à jour
vartypetype de paramètre : bool, enum, integer, real ou string
sourceprovenance de la valeur, fichier, session, config...
min_valvaleur minimale
max_valvaleur maximale
enumvalsvaleur énumérées permises
boot_valvaleur de compilation
reset_valvaleur utilisée après démarrage
sourcefilenom du fichier responsable de l'affectation
sourcelinenuméro de la ligne du fichier affectant la variable
pending_restartvrai si attente de redémarrage après modification l'exigeant

La valeur booléenne pending_restart, est positionnée à true si suite à un rechargement de la configuration il est remarqué que le paramètre à été modifié par rapport à sa valeur courante, mais que sa prise en compte ne pourra s'effectuer qu'après un redémarrage du serveur.

Le fichier postgresql.auto.conf

Suite à l'envoi de cette commande le fichier postgresql.auto.conf aura pour contenu :

# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
max_connections = '80'

Pour annuler les modifications réalisées via ALTER SYSTEM il suffit simplement de détruire le fichier postgresql.auto.conf.

Rechargement de la configuration

La commande pg_ctl -D chemin/vers/cluster reload n'est en réalité qu'un appel de la commande kill -HUP pid_serveur.

Pour obtenir de l'aide