Come trovo il percorso di pg_hba.conf dalla shell?


101

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 pg_configcomando, ma non sembra includere queste informazioni.

Questo è così che posso usare un comando uniforme per l'apertura pg_hba.confe altri file di configurazione PostgreSQL per l'editing.

Sto usando bash.


1
Che ne dite di individuare pg_hba.conf?
Pramod,

1
@Pramod Ce ne potrebbero essere decine in giro. Cosa succede se vuoi sapere quale di essi viene utilizzato da Postgres.
Bleeding Fingers,

@BleedingFingers A seconda della configurazione, probabilmente potresti semplicemente filtrare in base al tempo di accesso. find / -name pg_hba.conf -amin -5(se il server è stato riavviato negli ultimi 5 minuti; abbastanza facile cambiarlo -atimese è stato riavviato l'ultima volta più tempo fa). Oppure puoi filtrare in base al tempo di accesso più recente del tempo di modifica o una delle altre opzioni di ricerca in base al tempo ... (Anche se il filtro per lsof | grep pg_hba.confmentre un server è in esecuzione non funziona).
Parthian Shot,

Risposte:


152

pg_configserve 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.confpuò apparire in molti altri posti a seconda di come è stato installato Pg. La posizione standard è pg_hba.confall'interno data_directorydel 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.conftrova o chiedere al sysadmin dove si trova. Non puoi nemmeno fare affidamento sul chiedere dove si trova il datadir e sull'analisi postgresql.confperché uno script init potrebbe passare un parametro come -c hba_file=/some/other/pathquando 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, PGDATABASEecc 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.confper risolverlo.

Un'altra opzione è guardare l' psoutput 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.confsarà 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 initdbdatadir 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_lsclusterscomando da pg_wrapper.

Se non riesci a connetterti (Pg non è in esecuzione o devi modificarlo pg_hba.confper connetterti) dovrai cercare i pg_hba.conffile nel sistema . Su Mac e Linux qualcosa del genere sudo find / -type f -name pg_hba.conffarà. Quindi controlla il PG_VERSIONfile 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 psper vedere se l' -Dargomento della directory di dati corrisponde dove stai modificando, ecc.


Questo potrebbe non essere valido per 9.3, ottengo: psql: invalid port number: "format=unaligned"quando eseguo quel comando psql.
jcollum,

@jcollum No, solo un errore di battitura. -Pno -p. Fisso.
Craig Ringer,

Questa è l'unica risposta che funziona se hai installato più versioni di PostgreSQL.
Bonh,

C'è qualche speranza che Postges lo standardizzi? Ciò aiuterebbe molto con il mal di testa dell'installazione ...
Scott Skiles,

@ScottSkiles PostgreSQL non lo controlla, dipende dai pacchetti e dai distributori, che hanno tutti opinioni forti (e diverse) su dove dovrebbe essere.
Craig Ringer,

21

Ecco come lo faccio:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Dal momento che il percorso è così: /etc/postgresql/[VERSION]/main/pg_hba.conf


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)

1

Modificare il corretto pg_hba.confcon l'editor visivo predefinito (vim, emacs, nano, joe, ecc.) È facile come:

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



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.