pg_config dient zur Kompatibilitätsinformation, um Erweiterungen und Clientprogramme beim Kompilieren und Verknüpfen mit PostgreSQL zu unterstützen. Es weiß nichts über die aktiven PostgreSQL-Instanzen auf dem Computer, nur die Binärdateien.
pg_hba.conf kann an vielen anderen Stellen angezeigt werden, je nachdem, wie Pg installiert wurde. Der Standardspeicherort ist pg_hba.conf im Datenverzeichnis der Datenbank (möglicherweise in / home, / var / lib / pgsql, / var / lib / postgresql / [version] /, / opt / postgres / usw. usw. usw.). Benutzer und Verpacker können es jedoch beliebig platzieren. Unglücklicherweise.
Die einzig gültige Möglichkeit, pg_hba.conf zu finden, besteht darin, eine laufende PostgreSQL-Instanz zu fragen, wo sich pg_hba.conf befindet, oder den Systemadministrator zu fragen, wo sie sich befindet. Sie können sich nicht einmal darauf verlassen, zu fragen, wo sich das Datenverzeichnis befindet, und die Datei postgresql.conf zu analysieren, da ein Init-Skript beim Starten von Pg möglicherweise einen Parameter wie -c hba_file = / some / other / path übergeben hat.
Was Sie tun möchten, ist PostgreSQL zu fragen:
SHOW hba_file;
Dieser Befehl muss in einer Superuser-Sitzung ausgeführt werden. Für Shell-Skripte können Sie also Folgendes schreiben:
psql -t -P format=unaligned -c 'show hba_file';
und legen Sie die Umgebungsvariablen PGUSER, PGDATABASE usw. fest, um sicherzustellen, dass die Verbindung korrekt ist.
Ja, dies ist ein Henne-Ei-Problem. Wenn der Benutzer keine Verbindung herstellen kann (z. B. nachdem er die Bearbeitung von pg_hba.conf vermasselt hat), können Sie pg_hba.conf nicht finden, um es zu beheben.
Eine andere Möglichkeit besteht darin, die Ausgabe des Befehls ps zu überprüfen und festzustellen, ob das Postmaster-Datenverzeichnisargument -D dort sichtbar ist, z
ps aux | grep 'postgres *-D'
da sich pg_hba.conf im Datenverzeichnis befindet (es sei denn, Sie arbeiten unter Debian / Ubuntu oder einem Derivat und verwenden deren Pakete).
Wenn Sie speziell auf Ubuntu-Systeme abzielen, auf denen PostgreSQL aus Debian / Ubuntu-Paketen installiert ist, wird dies etwas einfacher. Sie müssen sich nicht mit handkompilierter Pg aus der Quelle befassen, für die jemand ein Datenverzeichnis in seinem Home-Verzeichnis initiiert hat, oder mit einer EnterpriseDB-Pg-Installation in / opt usw. Sie können pg_wrapper, das Debian / Ubuntu-Multi, fragen -version Pg Manager, bei dem PostgreSQL den Befehl pg_lsclusters von pg_wrapper verwendet.
Wenn Sie keine Verbindung herstellen können (Pg wird nicht ausgeführt oder Sie müssen pg_hba.conf bearbeiten, um eine Verbindung herzustellen), müssen Sie das System nach pg_hba.conf-Dateien durchsuchen. Unter Mac und Linux reicht so etwas wie sudo find / -type f -name pg_hba.conf aus. Überprüfen Sie dann die Datei PG_VERSION 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 stattdessen der Name des übergeordneten Verzeichnisses). Wenn Sie mehr als ein Datenverzeichnis für dieselbe PostgreSQL-Version haben, müssen Sie die Datenbankgröße überprüfen. Überprüfen Sie in der Befehlszeile der ausgeführten Postgres von ps, ob das Argument des Datenverzeichnisses -D mit dem von Ihnen bearbeiteten übereinstimmt .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711