pg_config
serve per informazioni sulla compliation, per aiutare le estensioni e i programmi client a compilare e collegare PostgreSQL. Non sa nulla delle istanze PostgreSQL attive sulla macchina, solo i binari.
pg_hba.conf
può apparire in molti altri posti a seconda di come è stato installato Pg. La posizione standard è pg_hba.conf
all'interno data_directory
del database (che potrebbe essere in /home
, /var/lib/pgsql
, /var/lib/postgresql/[version]/
, /opt/postgres/
, etc etc etc), ma gli utenti e confezionatori può mettere dove vogliono. Purtroppo.
L'unico modo valido per trovare pg_hba.conf
è chiedere a un'istanza PostgreSQL in esecuzione dove si pg_hba.conf
trova o chiedere al sysadmin dove si trova. Non puoi nemmeno fare affidamento sul chiedere dove si trova il datadir e sull'analisi postgresql.conf
perché uno script init potrebbe passare un parametro come -c hba_file=/some/other/path
quando si avvia Pg.
Quello che vuoi fare è chiedere a PostgreSQL:
SHOW hba_file;
Questo comando deve essere eseguito su una sessione di superutente, quindi per gli script di shell potresti scrivere qualcosa del tipo:
psql -t -P format=unaligned -c 'show hba_file';
e impostare le variabili di ambiente PGUSER
, PGDATABASE
ecc al fine di garantire che la connessione è giusto.
Sì, questo è un po 'un problema a base di gallina e uovo, nel senso che se l'utente non riesce a connettersi (diciamo, dopo aver rovinato la modifica pg_hba.conf
), non è possibile trovare pg_hba.conf
per risolverlo.
Un'altra opzione è guardare l' ps
output del comando e vedere se l'argomento della directory dei dati del postmaster -D
è visibile lì, ad es
ps aux | grep 'postgres *-D'
poiché pg_hba.conf
sarà all'interno della directory dei dati (a meno che tu non sia su Debian / Ubuntu o su qualche derivato e usi i loro pacchetti).
Se stai prendendo di mira specificamente i sistemi Ubuntu con PostgreSQL installato dai pacchetti Debian / Ubuntu diventa un po 'più facile. Non devi avere a che fare con Pg compilato a mano dalla fonte per cui qualcuno ha un initdb
datadir nella sua home directory, o un'installazione di EnterpriseDB Pg in / opt, ecc. Puoi chiedere pg_wrapper
, la Pg multi-versione Debian / Ubuntu manager, in cui PostgreSQL utilizza il pg_lsclusters
comando da pg_wrapper
.
Se non riesci a connetterti (Pg non è in esecuzione o devi modificarlo pg_hba.conf
per connetterti) dovrai cercare i pg_hba.conf
file nel sistema . Su Mac e Linux qualcosa del genere sudo find / -type f -name pg_hba.conf
farà. Quindi controlla il PG_VERSION
file nella stessa directory per assicurarti che sia la versione PostgreSQL giusta se ne hai più di una. (Se pg_hba.conf
è in /etc
/, ignoralo, è invece il nome della directory principale). Se hai più di una directory di dati per la stessa versione di PostgreSQL dovrai guardare le dimensioni del database, controllare la riga di comando dei postgres in esecuzione da ps
per vedere se l' -D
argomento della directory di dati corrisponde dove stai modificando, ecc.