Si libpq a été compilé avec le support de LDAP (option --with-ldap du script configure), il est possible de récupérer les options de connexion comme host ou dbname via LDAP à partir d'un serveur central. L'avantage en est que, si les paramètres de connexion d'une base évolue, l'information de connexion n'a pas à être modifiée sur toutes les machines clientes.
La recherche LDAP des paramètres de connexion utilise le fichier service pg_service.conf (voir Section 30.15, « Fichier des connexions de service »). Une ligne dans pg_service.conf commençant par ldap:// sera reconnue comme une URL LDAP et une requête LDAP sera exécutée. Le résultat doit être une liste de paires motclé = valeur qui sera utilisée pour configurer les options de connexion. L'URL doit être conforme à la RFC 1959 et être de la forme :
ldap://[hôte[:port]]/base_recherche?attribut?étendue_recherche?filtre
où hôte vaut par défaut localhost et port vaut par défaut 389.
Le traitement de pg_service.conf se termine après une recherche réussie dans LDAP, mais continu si le serveur LDAP ne peut pas être contacté. Cela fournit un moyen de préciser d'autres URL LDAP pointant vers d'autres serveurs LDAP, des paires classiques motclé = valeur ou les options de connexion par défaut. Si vous obtenez à la place un message d'erreur, ajoutez une ligne syntaxiquement incorrecte après l'URL LDAP.
Un exemple d'une entrée LDAP qui a été créée à partir d'un fichier LDIF
version: 1 dn: cn=mabase,dc=masociété,dc=com changetype: add objectclass: top objectclass: groupOfUniqueNames cn: mabase uniqueMember: host=monserveur.masociété.com uniqueMember: port=5439 uniqueMember: dbname=mabase uniqueMember: user=monutilisateur_base uniqueMember: sslmode=require
amènera l'exécution de l'URL LDAP suivante :
ldap://ldap.masociété.com/dc=masociété,dc=com?uniqueMember?one?(cn=mabase)
Vous pouvez mélanger des entrées d'un fichier de service standard avec des recherches par LDAP. Voici un exemple complet dans pg_service.conf :
# seuls l'hôte et le port sont stockés dans LDAP, # spécifiez explicitement le nom de la base et celui de l'utilisateur [customerdb] dbname=clients user=utilisateurappl ldap://ldap.acme.com/cn=serveur,cn=hosts?pgconnectinfo?base?(objectclass=*)