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. Standardową lokalizacją jest pg_hba.conf w katalogu danych bazy danych (która może znajdować się w katalogu / home, / var / lib / pgsql, / var / lib / postgresql / [wersja] /, / opt / postgres / itd. Itd. Itd.) ale użytkownicy i pakujący mogą je umieścić w dowolnym miejscu. Niestety.
Jedynym prawidłowym sposobem znalezienia pg_hba.conf jest zapytanie działającej instancji PostgreSQL, gdzie jest pg_hba.conf, lub zapytanie sysadmin, gdzie ona jest. Nie możesz nawet polegać na pytaniu, gdzie znajduje się datadir i analizowaniu pliku postgresql.conf, ponieważ skrypt inicjujący może przekazać parametr taki jak -c plik_ba_bba = / some / other / path podczas uruchamiania Pg.
Co chcesz zrobić, to zapytać PostgreSQL:
SHOW hba_file;
Ta komenda musi być uruchomiona w sesji superużytkownika, więc dla skryptów powłoki możesz napisać coś takiego:
psql -t -P format=unaligned -c 'show hba_file';
i ustaw zmienne środowiskowe PGUSER, PGDATABASE itp., aby upewnić się, że połączenie jest prawidłowe.
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 znaleźć pg_hba.conf, aby go naprawić.
Inną opcją jest przyjrzenie się wynikowi polecenia ps i sprawdzenie, czy argument -D katalogu danych postmaster -D jest tam widoczny, np
ps aux | grep 'postgres *-D'
ponieważ pg_hba.conf znajdzie się 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 mieć do czynienia z ręcznie skompilowanym ze źródła Pg, dla którego ktoś zainicjował katalog danych w swoim katalogu domowym, lub instalację EnterpriseDB Pg w / opt itp. Możesz zapytać pg_wrapper, Debian / Ubuntu multi -version Pg manager, gdzie PostgreSQL używa komendy pg_lsclusters z pg_wrapper.
Jeśli nie możesz się połączyć (Pg nie działa lub musisz edytować plik pg_hba.conf, aby się połączyć), musisz przeszukać system w poszukiwaniu plików pg_hba.conf. W systemach Mac i Linux wystarczy coś takiego jak sudo find / -type f -name pg_hba.conf. Następnie sprawdź plik PG_VERSION w tym samym katalogu, aby upewnić się, że jest to poprawna wersja PostgreSQL, jeśli masz więcej niż jedną. (Jeśli pg_hba.conf znajduje się 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 postgresu z ps, aby sprawdzić, czy argument katalogu danych -D pasuje do miejsca, w którym edytujesz itp. .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711