pg_config
est utilisé pour les informations de complémentation, pour aider les extensions et les programmes clients à compiler et à établir une liaison avec PostgreSQL. Il ne sait rien des instances actives de PostgreSQL sur la machine, mais uniquement des fichiers binaires.
pg_hba.conf
peut apparaître dans de nombreux autres endroits en fonction de la manière dont Pg a été installé. L'emplacement standard est pg_hba.conf
dans le data_directory
de la base de données (qui peut être en /home
, /var/lib/pgsql
, /var/lib/postgresql/[version]/
, /opt/postgres/
, etc. etc) mais les utilisateurs et les emballeurs peuvent le placer où ils veulent . Malheureusement.
Les seuls moyens valables de trouver pg_hba.conf
sont de demander à une instance PostgreSQL en cours d'exécution où se trouve pg_hba.conf
, ou de demander à l'administrateur système où il se trouve. Vous ne pouvez même pas vous demander où se trouve le datadir et analyser postgresql.conf
car un script init peut passer un paramètre comme -c hba_file=/some/other/path
au démarrage de Pg.
Ce que vous voulez faire est de demander à PostgreSQL:
SHOW hba_file;
Cette commande doit être exécutée sur une session de superutilisateur, donc pour les scripts shell, vous pouvez écrire quelque chose comme:
psql -t -P format=unaligned -c 'show hba_file';
et définissez les variables d'environnement PGUSER
, PGDATABASE
, etc. pour vous assurer que la connexion est correcte.
Oui, il s’agit plutôt d’un problème de poulet et d’œuf, car si l’utilisateur ne peut pas se connecter (par exemple, après avoir modifié pg_hba.conf
), vous ne pourrez pas trouver pg_hba.conf
pour le réparer .
Une autre option consiste à regarder la sortie de la commande ps
et à voir si l'argument du répertoire de données postmaster -D
est visible, par exemple
ps aux | grep 'postgres *-D'
puisque pg_hba.conf
sera dans le répertoire de données (sauf si vous êtes sur Debian / Ubuntu ou un dérivé et en utilisant leurs paquets).
Si vous ciblez spécifiquement les systèmes Ubuntu avec PostgreSQL installé à partir de paquets Debian / Ubuntu, cela devient un peu plus facile. Vous n'avez pas à traiter avec Pg compilé à la main à partir de la source pour lequel quelqu'un a co-ordonné% un datadir dans son répertoire personnel, ou une installation EnterpriseDB dans / opt, etc. Vous pouvez demander à initdb
, à Debian / Ubuntu multi-version Pg manager, où PostgreSQL utilise la commande pg_wrapper
depuis pg_lsclusters
.
Si vous ne pouvez pas vous connecter (Pg n'est pas en cours d'exécution ou si vous devez éditer pg_wrapper
pour vous connecter), vous devrez rechercher le fichier pg_hba.conf
dans le système. Sur Mac et Linux, quelque chose comme pg_hba.conf
fera l'affaire. Ensuite, vérifiez le fichier sudo find / -type f -name pg_hba.conf
dans le même répertoire pour vous assurer que c'est la bonne version de PostgreSQL si vous en avez plusieurs. (Si PG_VERSION
est dans pg_hba.conf
/, ignorez ceci, c'est le nom du répertoire parent à la place). 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 des postes en cours à partir de /etc
pour voir s'il correspond au répertoire de données ps
édition, etc.