Comment trouver le chemin de pg_hba.conf à partir du shell?

70

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é la commande pg_config , mais cela ne semble pas inclure cette information.

Ceci afin que je puisse utiliser une commande uniforme pour ouvrir pg_hba.conf et d’autres fichiers de configuration PostgreSQL pour les modifier.

J'utilise bash.

    
posée Roger Dahl 15.02.2013 - 19:38
la source

6 réponses

107

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.

    
réponse donnée Craig Ringer 16.02.2013 - 04:18
la source
17

Voici comment je le fais:

[email protected]:~$ ls /etc/postgresql
9.1
[email protected]:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

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

    
réponse donnée its_me 29.08.2013 - 15:42
la source
2

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)
    
réponse donnée radeklos 10.10.2014 - 15:07
la source
1

Modifier le pg_hba.conf correct 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

    
réponse donnée christianbundy 25.04.2015 - 00:30
la source
0

Demandez à votre base de données:

$ psql -U postgres
postgres=# SHOW config_file;
  • Copié depuis Stackoverflow - lien
réponse donnée Keerthi S 04.06.2018 - 15:55
la source
-2

Pour savoir où est le fichier tapez simplement:

pg_lsclusters
    
réponse donnée nirvanastack 14.10.2013 - 01:53
la source

Lire d'autres questions sur les étiquettes