Question Comment trouver le chemin vers pg_hba.conf depuis le shell?


Je voudrais obtenir le chemin de pg_hba.conf à partir du shell. Le chemin varie entre 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é le pg_config commande, mais il 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.


71
2018-02-15 18:38


origine


Que diriez-vous de localiser pg_hba.conf? - Pramod
@Pramod Il pourrait y en avoir des dizaines qui traînent. Que faire si vous voulez savoir lequel d’entre eux est utilisé par Postgres? - Bleeding Fingers
@BleedingFingers Selon votre configuration, vous pourriez probablement filtrer par heure d'accès. find / -name pg_hba.conf -amin -5 (si le serveur a été redémarré au cours des 5 dernières minutes, assez facile à changer pour -atime s'il a été redémarré il y a plus longtemps). Ou vous pouvez filtrer par heure d’accès plus récente que la date de modification ou l’une des autres options basées sur le temps ... lsof | grep pg_hba.conf alors que le fonctionnement d'un serveur ne fonctionne pas). - Parthian Shot


Réponses:


pg_config est pour les informations de complication, pour aider les extensions et les programmes clients à compiler et à lier 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 façon dont Pg a été installé. L'emplacement standard est pg_hba.conf dans le data_directory 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 emballeurs peuvent le mettre où ils veulent. Malheureusement.

Les seules manières valables de trouver pg_hba.conf est de demander une instance PostgreSQL en cours d'exécution où il est pg_hba.conf est, ou demandez à l'administrateur système où il est. Vous ne pouvez même pas vous demander où se trouve le datadir et analyser postgresql.conf parce qu'un script d'initialisation 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 de superutilisateur, donc pour les scripts shell, vous pouvez écrire quelque chose comme:

psql -t -P format=unaligned -c 'show hba_file';

et définir les variables d'environnement PGUSER, PGDATABASE, etc. pour vous assurer que la connexion est correcte.

Oui, c'est un peu un problème de poulet et d'œuf, si l'utilisateur ne peut pas se connecter (par exemple, après avoir modifié l'édition pg_hba.conf) vous ne pouvez pas trouver pg_hba.conf afin de le réparer.

Une autre option est de regarder le ps la sortie de la commande et voir si l'argument du répertoire de données postmaster -D est visible là, par ex.

ps aux  | grep 'postgres *-D'

depuis 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 que quelqu'un initdbun datadir pour dans leur répertoire personnel, ou une installation EnterpriseDB Pg dans / opt, etc. Vous pouvez demander pg_wrapper, le gestionnaire Pg multi-versions Debian / Ubuntu, où PostgreSQL utilise la pg_lsclusters commander 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 le système pour pg_hba.conf des dossiers. Sur Mac et Linux, quelque chose comme sudo find / -type f -name pg_hba.conf ça ira. 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 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 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 -Dargument correspond à l'endroit où vous éditez, etc.


107
2018-02-16 03:18



Cela pourrait ne pas être valable pour 9.3, je reçois: psql: invalid port number: "format=unaligned" quand je lance cette commande psql. - jcollum
@jcollum Nope, juste une faute de frappe. -P ne pas -p. Fixé. - Craig Ringer
C'est la seule réponse possible si plusieurs versions de PostgreSQL sont installées. - bonh


Voici comment je le fais:

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

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


17
2017-08-29 13:42





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)

2
2017-10-10 13:07





Modifier le correct 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


1
2018-04-24 22:30





Demandez à votre base de données:

$ psql -U postgres
postgres=# SHOW config_file;

0
2018-06-04 13:55





Pour savoir où est le fichier tapez simplement:

pg_lsclusters

-2
2017-10-13 23:53



Si vous souhaitez mettre à jour le fichier pg_hba.conf, exécutez la commande suivante: $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf - nirvanastack
-bash: pg_lsclusters: commande introuvable - Mona Jalal