Chciałbym uzyskać ścieżkę do pg_hba.conf z powłoki. Ścieżka różni się w zależności od wersji PostgreSQL. Na przykład dla 8.4 i 9.1:
/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
Wypróbowałem pg_config
polecenie, ale wydaje się, że nie zawiera ono tych informacji.
Dzięki temu mogę używać jednolitego polecenia do otwierania pg_hba.conf
i innych plików konfiguracyjnych PostgreSQL do edycji.
Używam bash.
postgresql
Roger Dahl
źródło
źródło
find / -name pg_hba.conf -amin -5
(jeśli serwer został zrestartowany w ciągu ostatnich 5 minut; wystarczy, aby go zmienić, jeśli serwer został ponownie-atime
uruchomiony wcześniej). Lub możesz filtrować według czasu dostępu nowszego niż zmiana czasu lub jednej z innych opcji wyszukiwania opartych na czasie ... (Chociaż filtrowanie wedługlsof | grep pg_hba.conf
czasu działania serwera nie działa).Odpowiedzi:
pg_config
służy do informacji o kompilacji, aby pomóc rozszerzeniom i programom klienckim kompilować i łączyć się z PostgreSQL. Nic nie wie o aktywnych instancjach PostgreSQL na komputerze, tylko pliki binarne.pg_hba.conf
może pojawić się w wielu innych miejscach, w zależności od sposobu instalacji Pg. Średnia lokalizacja jestpg_hba.conf
w obrębiedata_directory
bazy danych (który może być w/home
,/var/lib/pgsql
,/var/lib/postgresql/[version]/
,/opt/postgres/
, etc etc etc), ale użytkownicy i pakowaniem można umieścić go tam, gdzie im się podoba. Niestety.Jedynym prawidłowym sposobem znalezienia
pg_hba.conf
jest zapytanie działającej instancji PostgreSQL, gdzie onapg_hba.conf
jest, lub zapytanie sysadmin, gdzie ona jest. Nie możesz nawet polegać na pytaniu, gdzie jest datadir i analizowaniu,postgresql.conf
ponieważ skrypt init może przekazać parametry, jak-c hba_file=/some/other/path
podczas uruchamiania Pg.Co chcesz zrobić, to zapytać PostgreSQL:
To polecenie musi zostać uruchomione w sesji superużytkownika, więc dla skryptów powłoki możesz napisać coś takiego:
i ustawić zmienne środowiskowe
PGUSER
,PGDATABASE
itp aby upewnić się, że połączenie jest w porządku.Tak, jest to w pewnym sensie problem z kurczakiem i jajkiem, ponieważ jeśli użytkownik nie może się połączyć (powiedzmy, po zepsuciu edycji
pg_hba.conf
), nie możesz go znaleźćpg_hba.conf
, aby go naprawić.Inną opcją jest sprawdzenie danych
ps
wyjściowych polecenia i sprawdzenie, czy argument katalogu danych postmaster-D
jest tam widoczny, npponieważ
pg_hba.conf
będzie w katalogu danych (chyba że korzystasz z Debiana / Ubuntu lub jakiejś pochodnej i używasz ich pakietów).Jeśli celujesz w konkretne systemy Ubuntu z PostgreSQL zainstalowanym z pakietów Debian / Ubuntu, staje się to trochę łatwiejsze. Nie musisz zajmować się ręcznie skompilowanym ze źródła Pg, dla którego czyjś
initdb
da datadir w katalogu domowym, czy instalacją EnterpriseDB Pg w / opt itp. Możesz zapytaćpg_wrapper
, wersja Pg w wielu wersjach Debiana / Ubuntu menedżer, gdzie PostgreSQL używa siępg_lsclusters
polecenia zpg_wrapper
.Jeśli nie możesz się połączyć (Pg nie działa lub musisz edytować,
pg_hba.conf
aby się połączyć), musisz przeszukać system w poszukiwaniupg_hba.conf
plików. Na Macu i Linuksie coś takiegosudo find / -type f -name pg_hba.conf
zrobi. Następnie sprawdźPG_VERSION
plik w tym samym katalogu, aby upewnić się, że jest to poprawna wersja PostgreSQL, jeśli masz więcej niż jedną. (Jeślipg_hba.conf
jest w/etc
/, zignoruj to, zamiast tego jest to nazwa katalogu nadrzędnego). Jeśli masz więcej niż jeden katalog danych dla tej samej wersji PostgreSQL, musisz spojrzeć na rozmiar bazy danych, sprawdź wiersz poleceń uruchomionego postgres,ps
aby sprawdzić, czy jego-D
argument katalogu danych pasuje do miejsca, w którym edytujesz itp.źródło
psql: invalid port number: "format=unaligned"
kiedy uruchamiam to polecenie psql.-P
Nie-p
. Naprawiony.Tak to robię:
Ponieważ ścieżka jest taka:
/etc/postgresql/[VERSION]/main/pg_hba.conf
źródło
Korzystam z następujących funkcji do wykrywania plików konfiguracyjnych:
źródło
Edycja poprawnych
pg_hba.conf
ustawień za pomocą domyślnego edytora wizualnego (vim, emacs, nano, joe itp.) Jest tak prosta, jak:$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf
źródło
Zapytaj swoją bazę danych:
źródło
Aby wiedzieć, gdzie jest plik, po prostu wpisz:
źródło