pg_configest pour les informations de compliation, pour aider les extensions et les programmes clients à compiler et se lier à PostgreSQL. Il ne sait rien des instances actives de PostgreSQL sur la machine, seulement des fichiers binaires.
pg_hba.confpeut apparaître dans de nombreux autres endroits en fonction de l'installation de Pg. L'emplacement standard est pg_hba.confdans le data_directoryde la base de données (qui pourrait être /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, etc , etc , etc) , mais les utilisateurs et les emballeurs peuvent le mettre où ils veulent. Malheureusement.
Le seul moyen valable de trouver pg_hba.confest de demander à une instance PostgreSQL en cours d'exécution pg_hba.confou à l'administrateur sysadmin où elle se trouve. Vous ne pouvez même pas vous demander où se trouve datadir et analyser, postgresql.confcar un script init peut transmettre un paramètre comme -c hba_file=/some/other/pathlors du démarrage de Pg.
Ce que vous voulez faire, c'est demander à PostgreSQL:
SHOW hba_file;
Cette commande doit être exécutée sur une session de superutilisateur. Ainsi, pour les scripts shell, vous pourriez écrire quelque chose comme:
psql -t -P format=unaligned -c 'show hba_file';
et définir les variables d'environnement PGUSER, PGDATABASEetc. pour assurer que la connexion est bonne.
Oui, il s’agit en quelque sorte d’un problème particulier: si l’utilisateur ne peut pas se connecter (par exemple, après avoir bousillé le montage pg_hba.conf), vous ne pouvez pas le trouver pg_hba.confpour le réparer.
Une autre option consiste à examiner le résultat de la pscommande pour voir si l'argument postmaster data directory -Dest visible ici, par exemple:
ps aux | grep 'postgres *-D'
car pg_hba.confsera dans le répertoire de données (sauf si vous êtes sur Debian / Ubuntu ou sur un dérivé et que vous utilisez leurs paquets).
Si vous ciblez spécifiquement des systèmes Ubuntu avec PostgreSQL installés à partir de paquets Debian / Ubuntu, cela devient un peu plus facile. Vous n'avez pas à traiter avec une page source compilée à la main initdbpour laquelle le nom de données d'un utilisateur est situé dans son répertoire personnel, ni une installation EnterpriseDB Pg dans / opt, etc. Vous pouvez demander pg_wrapper, la version multi-version Debian / Ubuntu manager, où PostgreSQL utilise la pg_lsclusterscommande de pg_wrapper.
Si vous ne pouvez pas vous connecter (Pg n'est pas en cours d'exécution ou si vous devez l'éditer pg_hba.confpour vous connecter), vous devrez rechercher des pg_hba.conffichiers dans le système . Sur Mac et Linux, quelque chose sudo find / -type f -name pg_hba.confva faire. Ensuite, vérifiez le PG_VERSIONfichier dans le même répertoire pour vous assurer que c'est la bonne version de PostgreSQL si vous en avez plusieurs. (Si pg_hba.confest dans /etc/, ignorez ceci, c'est plutôt le nom du répertoire parent). Si vous avez plus d'un répertoire de données pour la même version de PostgreSQL, vous devrez examiner la taille de la base de données, vérifiez la ligne de commande du postgres en cours d'exécution pspour voir si l' -Dargument du répertoire de données correspond à l'endroit où vous modifiez, etc.