pg_configdient zur Vervollständigung von Informationen, um Erweiterungen und Client-Programmen beim Kompilieren und Verknüpfen mit PostgreSQL zu helfen. Es weiß nichts über die aktiven PostgreSQL-Instanzen auf dem Computer, nur die Binärdateien.
pg_hba.confkann an vielen anderen Stellen erscheinen, je nachdem, wie Pg installiert wurde. Die Standardposition ist pg_hba.confinnerhalb der data_directoryvon der Datenbank (die in sein könnte /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, etc etc etc) , aber Benutzer und Verpacker können sie setzen , wo immer sie wollen. Unglücklicherweise.
Die einzig gültige Möglichkeit pg_hba.confbesteht darin, eine laufende PostgreSQL-Instanz zu fragen, wo sie sich pg_hba.confbefindet, oder den Sysadmin zu fragen, wo sie sich befindet. Sie können sich nicht einmal darauf verlassen, nach dem Datadir zu fragen und zu analysieren, postgresql.confda ein Init-Skript möglicherweise einen Parameter wie -c hba_file=/some/other/pathbeim Starten von Pg ü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, PGDATABASEusw. , um sicherzustellen , dass die Verbindung richtig ist.
Ja, dies ist ein kleines Henne-Ei-Problem. Wenn der Benutzer keine Verbindung herstellen kann (z. B. nach einer fehlerhaften Bearbeitung pg_hba.conf), können Sie es nicht finden pg_hba.conf, um es zu beheben.
Eine andere Möglichkeit besteht darin, die psAusgabe des Befehls zu überprüfen und festzustellen, ob das Argument für das Postmaster-Datenverzeichnis -Ddort sichtbar ist, z
ps aux | grep 'postgres *-D'
since pg_hba.confwird sich im Datenverzeichnis befinden (es sei denn, Sie arbeiten mit Debian / Ubuntu oder einem Derivat und verwenden deren Pakete).
Wenn Sie speziell Ubuntu-Systeme mit PostgreSQL aus Debian / Ubuntu-Paketen ansprechen, wird es etwas einfacher. Sie müssen sich nicht mit von Hand kompilierten Quell-Pg initdbbefassen, für die jemand ein Dateiverzeichnis in seinem Home-Verzeichnis hat, oder mit einer EnterpriseDB-Pg-Installation in / opt usw. Sie können pg_wrapperdie Debian / Ubuntu-Multi-Version-Pg fragen manager, bei dem PostgreSQL den pg_lsclustersBefehl from verwendet pg_wrapper.
Wenn Sie keine Verbindung herstellen können (Pg läuft nicht oder Sie müssen bearbeiten pg_hba.conf, um eine Verbindung herzustellen), müssen Sie das System nach pg_hba.confDateien durchsuchen . Auf Mac und Linux reicht sowas sudo find / -type f -name pg_hba.confschon. Überprüfen Sie dann die PG_VERSIONDatei im selben Verzeichnis, um sicherzustellen, dass es sich um die richtige PostgreSQL-Version handelt, wenn Sie mehr als eine haben. (Wenn pg_hba.confsich 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 des ausgeführten Postgres ps, ob das -DArgument des Datenverzeichnisses mit der Stelle übereinstimmt, an der Sie es bearbeiten.