Ich möchte den Pfad zu pg_hba.conf von der Shell erhalten. Der Pfad variiert zwischen den PostgreSQL-Versionen. Zum Beispiel für 8.4 und 9.1:
/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
Ich habe den pg_config
Befehl ausprobiert , aber er scheint diese Informationen nicht zu enthalten.
Auf diese Weise kann ich einen einheitlichen Befehl zum Öffnen pg_hba.conf
und andere PostgreSQL-Konfigurationsdateien zum Bearbeiten verwenden.
Ich benutze Bash.
postgresql
Roger Dahl
quelle
quelle
find / -name pg_hba.conf -amin -5
(wenn der Server in den letzten 5 Minuten neu gestartet wurde; einfach genug, um ihn in einen neu gestarteten Server vor-atime
einer längeren Zeit zu ändern ). Oder Sie können nach Zugriffszeit filtern, die neuer als die Änderungszeit ist, oder eine der anderen zeitbasierten Optionen suchen ... (Obwohl das Filtern nach,lsof | grep pg_hba.conf
während ein Server ausgeführt wird, nicht funktioniert).Antworten:
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 istpg_hba.conf
innerhalb derdata_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 sichpg_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:
Dieser Befehl muss in einer Superuser-Sitzung ausgeführt werden. Für Shell-Skripte können Sie also Folgendes schreiben:
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 findenpg_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, zsince
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önnenpg_wrapper
die Debian / Ubuntu-Multi-Version-Pg fragen manager, bei dem PostgreSQL denpg_lsclusters
Befehl from verwendetpg_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 nachpg_hba.conf
Dateien durchsuchen . Auf Mac und Linux reicht sowassudo find / -type f -name pg_hba.conf
schon. Überprüfen Sie dann diePG_VERSION
Datei im selben Verzeichnis, um sicherzustellen, dass es sich um die richtige PostgreSQL-Version handelt, wenn Sie mehr als eine haben. (Wennpg_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 Postgresps
, ob das-D
Argument des Datenverzeichnisses mit der Stelle übereinstimmt, an der Sie es bearbeiten.quelle
psql: invalid port number: "format=unaligned"
wenn ich diesen psql-Befehl ausführe.-P
nicht-p
. Fest.So mache ich es:
Da der Weg so ist:
/etc/postgresql/[VERSION]/main/pg_hba.conf
quelle
Ich verwende Folgendes zur Erkennung von Konfigurationsdateien:
quelle
Das korrekte Editieren
pg_hba.conf
mit Ihrem standardmäßigen visuellen Editor (vim, emacs, nano, joe usw.) ist so einfach wie:$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf
quelle
Fragen Sie Ihre Datenbank:
quelle
Um zu wissen, wo sich die Datei befindet, geben Sie einfach Folgendes ein:
quelle