pg_config
est 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.conf
peut apparaître dans de nombreux autres endroits en fonction de l'installation de Pg. L'emplacement standard est pg_hba.conf
dans le data_directory
de 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.conf
est de demander à une instance PostgreSQL en cours d'exécution pg_hba.conf
ou à l'administrateur sysadmin où elle se trouve. Vous ne pouvez même pas vous demander où se trouve datadir et analyser, postgresql.conf
car un script init peut transmettre un paramètre comme -c hba_file=/some/other/path
lors 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
, PGDATABASE
etc. 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.conf
pour le réparer.
Une autre option consiste à examiner le résultat de la ps
commande pour voir si l'argument postmaster data directory -D
est visible ici, par exemple:
ps aux | grep 'postgres *-D'
car pg_hba.conf
sera 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 initdb
pour 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_lsclusters
commande 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.conf
pour vous connecter), vous devrez rechercher des pg_hba.conf
fichiers dans le système . Sur Mac et Linux, quelque chose sudo find / -type f -name pg_hba.conf
va faire. Ensuite, vérifiez le PG_VERSION
fichier 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.conf
est 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 ps
pour voir si l' -D
argument du répertoire de données correspond à l'endroit où vous modifiez, etc.