pg_config est pour les informations de complication, pour aider les extensions et les programmes clients à compiler et à se lier à PostgreSQL. Il ne sait rien des instances PostgreSQL actives sur la machine, seulement les binaires.
pg_hba.conf peut apparaître à de nombreux autres endroits selon la façon dont Pg a été installé. L'emplacement standard est pg_hba.conf dans le répertoire data_de la base de données (qui pourrait être dans / home, / var / lib / pgsql, / var / lib / postgresql / [version] /, / opt / postgres /, etc etc etc)) mais les utilisateurs et les conditionneurs peuvent le placer où bon leur semble. Malheureusement.
Le seul moyen valable de trouver pg_hba.conf est de demander à une instance PostgreSQL en cours d'exécution où se trouve pg_hba.conf, ou de demander au sysadmin où il se trouve. Vous ne pouvez même pas vous fier à 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 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 superutilisateur, donc pour les scripts shell, vous pourriez é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, c'est un peu un problème de poule et d'oeuf, en ce sens que si l'utilisateur ne peut pas se connecter (par exemple, après avoir bousillé l'édition de pg_hba.conf), vous ne pouvez pas trouver pg_hba.conf pour le corriger.
Une autre option consiste à regarder la sortie de la commande ps et à voir si l'argument du répertoire de données postmaster -D y est visible, par exemple
ps aux | grep 'postgres *-D'
puisque pg_hba.conf sera à l'intérieur du répertoire de données (sauf si vous êtes sur Debian / Ubuntu ou un dérivé et utilisez leurs paquets).
Si vous ciblez spécifiquement des systèmes Ubuntu avec PostgreSQL installé à partir de paquets Debian / Ubuntu, cela devient un peu plus facile. Vous n'avez pas à gérer un Pg compilé à la main pour lequel quelqu'un a initialisé un datadir dans son répertoire personnel, ou une installation EnterpriseDB Pg dans / opt, etc. Vous pouvez demander à pg_wrapper, le multi Debian / Ubuntu -version Pg manager, où PostgreSQL utilise la commande pg_lsclusters de pg_wrapper.
Si vous ne pouvez pas vous connecter (Pg n'est pas en cours d'exécution, ou vous devez modifier pg_hba.conf pour vous connecter), vous devrez rechercher les fichiers pg_hba.conf dans le système. Sur Mac et Linux, quelque chose comme sudo find / -type f -name pg_hba.conf fera l'affaire. Vérifiez ensuite le fichier PG_VERSION dans le même répertoire pour vous assurer qu'il s'agit de la bonne version de PostgreSQL si vous en avez plusieurs. (Si pg_hba.conf est dans / etc /, ignorez cela, 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 regarder la taille de la base de données, vérifiez la ligne de commande des postgres en cours d'exécution à partir de ps pour voir si son répertoire de données - l'argument D correspond à l'endroit où vous éditez, etc. .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711