Come trovo il percorso di pg_hba.conf dalla shell?

70

Vorrei ottenere il percorso di pg_hba.conf dalla shell. Il percorso varia tra le versioni di PostgreSQL. Ad esempio, per 8.4 e 9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

Ho provato il comando pg_config , ma non sembra includere queste informazioni.

Questo è così che posso usare un comando uniforme per aprire pg_hba.conf e altri file di configurazione di PostgreSQL per la modifica.

Sto usando bash.

    
posta Roger Dahl 15.02.2013 - 19:38

6 risposte

107

pg_config è per informazioni di compliation, per aiutare estensioni e programmi client a compilare e linkare contro PostgreSQL. Non sa nulla delle istanze attive di PostgreSQL sulla macchina, solo dei binari.

pg_hba.conf può apparire in molti altri luoghi a seconda di come è stata installata Pg. La posizione standard è pg_hba.conf all'interno di data_directory del database (che potrebbe essere in /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ , ecc ecc. Ecc.) Ma gli utenti e i packager possono posizionarlo dove preferiscono . Purtroppo.

Gli unici metodi validi per trovare pg_hba.conf è chiedere a un'istanza di PostgreSQL in esecuzione dove è pg_hba.conf oppure chiedere a sysadmin dove si trova. Non puoi nemmeno fare affidamento sul chiedere dove si trova il datadir e analizzare postgresql.conf perché uno script di init potrebbe aver passato un parametro come -c hba_file=/some/other/path all'avvio di Pg.

Quello che vuoi fare è chiedere a PostgreSQL:

SHOW hba_file;

Questo comando deve essere eseguito su una sessione di superutente, quindi per lo scripting della shell potresti scrivere qualcosa come:

psql -t -P format=unaligned -c 'show hba_file';

e imposta le variabili di ambiente PGUSER , PGDATABASE , ecc. per assicurarti che la connessione sia corretta.

Sì, si tratta di un problema di pollo e uova, nel senso che se l'utente non riesce a connettersi (ad esempio, dopo aver rovinato la modifica di pg_hba.conf ) non è possibile trovare pg_hba.conf per risolverlo .

Un'altra opzione è esaminare l'output del comando ps e vedere se l'argomento della directory dei dati postmaster -D è visibile lì, ad es.

ps aux  | grep 'postgres *-D'

dato che pg_hba.conf sarà all'interno della directory dei dati (a meno che tu non sia su Debian / Ubuntu o qualche derivato e usi i loro pacchetti).

Se stai mirando specificamente ai sistemi Ubuntu con PostgreSQL installato dai pacchetti Debian / Ubuntu, diventa un po 'più semplice. Non hai a che fare con Pg compilato a mano da qualcuno che initdb 'da datadir per nella loro directory home, o un'installazione EnterpriseDB Pg in / opt, ecc. Puoi chiedere pg_wrapper , il Debian / Gestore Pg multi-versione di Ubuntu, dove PostgreSQL sta usando il comando pg_lsclusters da pg_wrapper .

Se non riesci a connetterti (Pg non è in esecuzione, o devi modificare pg_hba.conf per connetterti) dovrai cercare nel sistema file pg_hba.conf . Su Mac e Linux ci sarà qualcosa come sudo find / -type f -name pg_hba.conf . Quindi controlla il file PG_VERSION nella stessa directory per assicurarti che sia la giusta versione di PostgreSQL se ne hai più di una. (Se pg_hba.conf è in /etc /, ignoralo, è invece il nome della directory padre). Se hai più di una directory di dati per la stessa versione di PostgreSQL dovrai guardare le dimensioni del database, controlla la riga di comando dei postaggi in esecuzione da ps per vedere se è la directory dei dati -D argomento corrisponde a dove sei modifica, ecc.

    
risposta data Craig Ringer 16.02.2013 - 04:18
17

Ecco come lo faccio:

[email protected]:~$ ls /etc/postgresql
9.1
[email protected]:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Poiché il percorso è simile a questo: /etc/postgresql/[VERSION]/main/pg_hba.conf

    
risposta data its_me 29.08.2013 - 15:42
2

Sto usando quanto segue per il rilevamento dei file di configurazione:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
    
risposta data radeklos 10.10.2014 - 15:07
1

Modificare il pg_hba.conf corretto con l'editor visuale predefinito (vim, emacs, nano, joe, ecc.) è facile come:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf

    
risposta data christianbundy 25.04.2015 - 00:30
0

Chiedi al tuo database:

$ psql -U postgres
postgres=# SHOW config_file;
  • Copiato da StackOverflow - link
risposta data Keerthi S 04.06.2018 - 15:55
-2

Per sapere dove si trova il file digita semplicemente:

pg_lsclusters
    
risposta data nirvanastack 14.10.2013 - 01:53

Leggi altre domande sui tag