pg_config
dient 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.conf
kann an vielen anderen Stellen erscheinen, je nachdem, wie Pg installiert wurde. Die Standardposition ist pg_hba.conf
innerhalb der data_directory
von 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.conf
besteht darin, eine laufende PostgreSQL-Instanz zu fragen, wo sie sich pg_hba.conf
befindet, 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.conf
da ein Init-Skript möglicherweise einen Parameter wie -c hba_file=/some/other/path
beim 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
, PGDATABASE
usw. , 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 ps
Ausgabe des Befehls zu überprüfen und festzustellen, ob das Argument für das Postmaster-Datenverzeichnis -D
dort sichtbar ist, z
ps aux | grep 'postgres *-D'
since pg_hba.conf
wird 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 initdb
befassen, für die jemand ein Dateiverzeichnis in seinem Home-Verzeichnis hat, oder mit einer EnterpriseDB-Pg-Installation in / opt usw. Sie können pg_wrapper
die Debian / Ubuntu-Multi-Version-Pg fragen manager, bei dem PostgreSQL den pg_lsclusters
Befehl 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.conf
Dateien durchsuchen . Auf Mac und Linux reicht sowas sudo find / -type f -name pg_hba.conf
schon. Ü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 pg_hba.conf
sich 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 -D
Argument des Datenverzeichnisses mit der Stelle übereinstimmt, an der Sie es bearbeiten.