Comment trouver le chemin d’access à pg_hba.conf à partir du shell?

Je voudrais obtenir le chemin vers pg_hba.conf à partir du shell. Le chemin varie selon les versions de PostgreSQL. Par exemple, pour 8.4 et 9.1:

/etc/postgresql/8.4/main/pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf 

J’ai essayé la commande pg_config , mais elle ne semble pas inclure cette information.

C’est pour que je puisse utiliser une commande uniforme pour ouvrir pg_hba.conf et d’autres fichiers de configuration PostgreSQL pour l’édition.

J’utilise bash.

pg_config est destiné aux informations de conformité, afin d’aider les extensions et les programmes clients à se comstackr et à établir des liens avec PostgreSQL Il ne sait rien des instances actives de PostgreSQL sur la machine, uniquement des fichiers binarys.

pg_hba.conf peut apparaître à bien d’autres endroits en fonction de l’installation de Pg. L’emplacement standard est pg_hba.conf dans le data_directory de la firebase database (qui peut se trouver dans /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ , etc., etc.). mais les utilisateurs et les emballeurs peuvent le mettre où ils veulent. Malheureusement.

Le seul moyen valable de trouver pg_hba.conf consiste à demander à une instance PostgreSQL en cours d’exécution où se trouve pg_hba.conf , ou à demander à l’administrateur système à qui il se trouve. Vous ne pouvez même pas vous contenter de demander où se trouve datadir et d’parsingr postgresql.conf car un script d’initialisation pourrait transmettre un -c hba_file=/some/other/path tel que -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éfinissez les variables d’environnement PGUSER , PGDATABASE , etc. pour vous assurer que la connexion est correcte.

Oui, il s’agit d’un problème particulier: si l’utilisateur ne peut pas se connecter (par exemple, après avoir pg_hba.conf édition de pg_hba.conf ), vous ne pouvez pas trouver pg_hba.conf afin de le réparer.

Une autre option consiste à examiner le résultat de la commande ps pour voir si l’argument -D répertoire de données postmaster 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 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 pour laquelle le nom de personne initdb ‘da datadir se trouve dans son initdb personnel, ou une installation de la page EnterpriseDB Pg dans / opt, etc. Vous pouvez demander à pg_wrapper , le pg_wrapper -version Debian / Ubuntu. version Pg manager, où PostgreSQL utilise la commande pg_wrapper de pg_wrapper .

Si vous ne pouvez pas vous connecter (Pg n’est pas en cours d’exécution ou vous devez éditer pg_hba.conf pour vous connecter), vous devrez rechercher dans le système les fichiers pg_hba.conf . Sur Mac et Linux, quelque chose comme sudo find / -type f -name pg_hba.conf fera l’affaire. Ensuite, vérifiez le fichier PG_VERSION 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-le, c’est le nom du répertoire parent à la place). Si vous avez plusieurs répertoires de données pour la même version de PostgreSQL, vous devrez examiner la taille de la firebase database, vérifiez la ligne de commande du postgres en cours d’exécution depuis ps pour voir si le répertoire de données -D correspond à l’argument que vous modifiez, etc. .

Voici comment je le fais:

 john@host:~$ ls /etc/postgresql 9.1 john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf 

Comme le chemin est comme ceci: /etc/postgresql/[VERSION]/main/pg_hba.conf

J’utilise les éléments suivants pour la détection des fichiers de configuration:

 $(ls /etc/postgresql/*/main/pg_hba.conf) $(ls /etc/postgresql/*/main/postgresql.conf) 

Editer le bon pg_hba.conf avec votre éditeur visuel par défaut (vim, emacs, nano, joe, etc.) est aussi simple que:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf

Demandez à votre firebase database:

 $ psql -U postgres postgres=# SHOW config_file; 

Pour savoir où se trouve le fichier, tapez simplement:

 pg_lsclusters