Je voudrais obtenir le chemin vers pg_hba.conf depuis le 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 pg_config
commande, mais elle ne semble pas inclure cette information.
C'est pour que je puisse utiliser une commande uniforme pour l'ouverture pg_hba.conf
et d'autres fichiers de configuration PostgreSQL pour l'édition.
J'utilise bash.
postgresql
Roger Dahl
la source
la source
find / -name pg_hba.conf -amin -5
(si le serveur a été redémarré au cours des 5 dernières minutes; assez facile pour le remplacer par-atime
s'il avait été redémarré il y a plus longtemps). Vous pouvez également filtrer par heure d'accès plus récente que l'heure de modification ou par l'une des autres options basées sur l'heure ... (bien que le filtrage parlsof | grep pg_hba.conf
pendant l'exécution d'un serveur ne fonctionne pas).Réponses:
pg_config
est pour les informations de compliation, pour aider les extensions et les programmes clients à compiler et se lier à PostgreSQL. Il ne sait rien des instances actives de PostgreSQL sur la machine, seulement des fichiers binaires.pg_hba.conf
peut apparaître dans de nombreux autres endroits en fonction de l'installation de Pg. L'emplacement standard estpg_hba.conf
dans ledata_directory
de la base de données (qui pourrait être/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.Le seul moyen valable de trouver
pg_hba.conf
est de demander à une instance PostgreSQL en cours d'exécutionpg_hba.conf
ou à l'administrateur sysadmin où elle se trouve. Vous ne pouvez même pas vous demander où se trouve datadir et analyser,postgresql.conf
car un script init peut transmettre 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:
Cette commande doit être exécutée sur une session de superutilisateur. Ainsi, pour les scripts shell, vous pourriez écrire quelque chose comme:
et définir les variables d'environnement
PGUSER
,PGDATABASE
etc. pour assurer que la connexion est bonne.Oui, il s’agit en quelque sorte d’un problème particulier: si l’utilisateur ne peut pas se connecter (par exemple, après avoir bousillé le montage
pg_hba.conf
), vous ne pouvez pas le trouverpg_hba.conf
pour le réparer.Une autre option consiste à examiner le résultat de la
ps
commande pour voir si l'argument postmaster data directory-D
est visible ici, par exemple:car
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
initdb
pour laquelle le nom de données d'un utilisateur est situé dans son répertoire personnel, ni une installation EnterpriseDB Pg dans / opt, etc. Vous pouvez demanderpg_wrapper
, la version multi-version Debian / Ubuntu manager, où PostgreSQL utilise lapg_lsclusters
commande depg_wrapper
.Si vous ne pouvez pas vous connecter (Pg n'est pas en cours d'exécution ou si vous devez l'éditer
pg_hba.conf
pour vous connecter), vous devrez rechercher despg_hba.conf
fichiers dans le système . Sur Mac et Linux, quelque chosesudo find / -type f -name pg_hba.conf
va faire. Ensuite, vérifiez lePG_VERSION
fichier dans le même répertoire pour vous assurer que c'est la bonne version de PostgreSQL si vous en avez plusieurs. (Sipg_hba.conf
est dans/etc
/, ignorez ceci, c'est plutôt le nom du répertoire parent). 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 du postgres en cours d'exécutionps
pour voir si l'-D
argument du répertoire de données correspond à l'endroit où vous modifiez, etc.la source
psql: invalid port number: "format=unaligned"
quand j’exécute cette commande psql.-P
non-p
. Fixé.Voici comment je le fais:
Puisque le chemin est comme ça:
/etc/postgresql/[VERSION]/main/pg_hba.conf
la source
J'utilise les éléments suivants pour la détection des fichiers de configuration:
la source
Éditer 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
la source
Demandez à votre base de données:
la source
Pour savoir où se trouve le fichier, tapez simplement:
la source