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 jest pg_hba.conf
w obrębie data_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 ona pg_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:
SHOW hba_file;
To polecenie musi zostać uruchomione 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 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, np
ps aux | grep 'postgres *-D'
ponieważ 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 z pg_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 poszukiwaniu pg_hba.conf
plików. Na Macu i Linuksie coś takiego sudo 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śli pg_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.