Pg_config ist für Kompilierungsinformationen, um Erweiterungen und Client-Programme beim Kompilieren und Verlinken gegen PostgreSQL zu unterstützen. Es weiß nichts über die aktive PostgreSQL-Instanz(en) auf dem Rechner, nur über die Binärdateien.
pg_hba.conf kann je nach Installation von Pg an vielen anderen Orten erscheinen. Der Standardort ist pg_hba.conf innerhalb des Datenverzeichnisses der Datenbank (das sich z.B. in /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, usw. befinden könnte), aber Benutzer und Paketbetreuer können es überall hinlegen, wo sie möchten. Leider.
Die einzigen gültigen Möglichkeiten, pg_hba.conf zu finden, sind entweder eine laufende PostgreSQL-Instanz nach seinem pg_hba.conf zu fragen oder den Systemadministrator zu fragen, wo es sich befindet. Sie können nicht einmal darauf vertrauen, zu fragen, wo das Datadir ist und die postgresql.conf zu parsen, weil ein Init-Skript Pg beim Starten z.B. einen Parameter wie -c hba_file=/some/other/path übergeben könnte.
Was Sie tun möchten, ist PostgreSQL fragen:
SHOW hba_file;
Dieser Befehl muss in einer Superuser-Sitzung ausgeführt werden, also für Shell-Skripte könnten Sie etwas wie folgt schreiben:
psql -t -P format=unaligned -c 'show hba_file';
und setzen Sie die Umgebungsvariablen PGUSER, PGDATABASE, usw., um sicherzustellen, dass die Verbindung richtig ist.
Ja, dies ist etwas wie ein Huhn-und-Ei-Problem, denn wenn der Benutzer keine Verbindung herstellen kann (zum Beispiel nach dem Verhunzen der Bearbeitung von pg_hba.conf), können Sie pg_hba.conf nicht finden, um es zu reparieren.
Eine weitere Option ist, die Ausgabe des ps-Befehls zu überprüfen und zu sehen, ob das Datenverzeichnisargument -D des Postmasters dort sichtbar ist, z.B.
ps aux | grep 'postgres *-D'
da sich pg_hba.conf im Datenverzeichnis befinden wird (es sei denn, Sie verwenden Debian/Ubuntu oder eine Ableitung davon und deren Pakete).
Wenn Sie speziell auf Ubuntu-Systeme mit PostgreSQL abzielende Debian/Ubuntu-Pakete installiert haben, wird es etwas einfacher. Sie müssen sich nicht mit von Hand aus Quellen kompilierten Pg befassen, für das jemand ein Datadir in seinem Home-Verzeichnis initialisiert hat, oder mit einer EnterpriseDB Pg-Installation in /opt, usw. Sie können pg_wrapper, dem Debian/Ubuntu Multi-Version Pg-Manager, fragen, wo sich PostgreSQL befindet, indem Sie den Befehl pg_lsclusters von pg_wrapper verwenden.
Wenn Sie keine Verbindung herstellen können (Pg läuft nicht oder Sie müssen pg_hba.conf bearbeiten, um eine Verbindung herzustellen), müssen Sie nach pg_hba.conf-Dateien auf dem System suchen. Auf Mac und Linux funktioniert etwas wie sudo find / -type f -name pg_hba.conf. Überprüfen Sie dann die PG_VERSION-Datei im selben Verzeichnis, um sicherzustellen, dass es sich um die richtige PostgreSQL-Version handelt, wenn Sie mehr als eine haben. (Wenn sich pg_hba.conf in /etc/ befindet, ignorieren Sie dies, es ist der übergeordnete Verzeichnisname). Wenn Sie mehr als ein Datenverzeichnis für dieselbe PostgreSQL-Version haben, müssen Sie die Datenbankgröße überprüfen, die Befehlszeile des laufenden postgres von ps überprüfen, um zu sehen, ob sein Datenverzeichnis -D-Argument mit dem übereinstimmt, was Sie bearbeiten, usw. https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711